Rumah > Java > javaTutorial > Bagaimana untuk Menggunakan setDate() dengan betul dalam PreparedStatements untuk Mengelakkan `java.lang.IllegalArgumentException`?

Bagaimana untuk Menggunakan setDate() dengan betul dalam PreparedStatements untuk Mengelakkan `java.lang.IllegalArgumentException`?

Barbara Streisand
Lepaskan: 2024-12-10 18:43:10
asal
790 orang telah melayarinya

How to Correctly Use setDate() in PreparedStatements to Avoid `java.lang.IllegalArgumentException`?

Menggunakan setDate dalam PreparedStatement

Untuk menyeragamkan pangkalan kod kami, kami telah ditugaskan untuk mengalihkan semua kejadian pembolehubah SQL berkod keras kepada penyataan yang disediakan dengan pembolehubah terikat. Walau bagaimanapun, kami telah menghadapi masalah dengan kaedah setDate().

Coretan kod yang disediakan adalah seperti berikut:

DateFormat dateFormatYMD = new SimpleDateFormat("yyyy/MM/dd HH:mm:ss");
DateFormat dateFormatMDY = new SimpleDateFormat("MM/dd/yyyy HH:mm:ss");
Date now = new Date();
String vDateYMD = dateFormatYMD.format(now);
String vDateMDY = dateFormatMDY.format(now);
String vDateMDYSQL = vDateMDY;
java.sql.Date date = new java.sql.Date(0000-00-00);

requestSQL = "INSERT INTO CREDIT_REQ_TITLE_ORDER (REQUEST_ID," + " ORDER_DT, FOLLOWUP_DT) " + "values(?,?,?,)";

prs = conn.prepareStatement(requestSQL);
prs.setInt(1, new Integer(requestID));
prs.setDate(2, date.valueOf(vDateMDYSQL));
prs.setDate(3, date.valueOf(sqlFollowupDT));
Salin selepas log masuk

Setelah melaksanakan pertanyaan SQL, ralat berikut ialah ditemui:

java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Date.java:138)
at com.cmsi.eValuate.TAF.TAFModuleMain.CallTAF(TAFModuleMain.java:1211)
Salin selepas log masuk

Penyelesaian

Kaedah setDate() memerlukan nilai tarikh yang sah. Dalam kes ini, kami telah menetapkannya kepada new java.sql.Date(0000-00-00), iaitu tarikh yang tidak sah.

Untuk menyelesaikan isu ini, penyelesaian berikut boleh dipertimbangkan:

Menggunakan java.sql.Date

Jika lajur jadual mempunyai jenis DATE, pilihan berikut tersedia:

  • java.lang.String: Gunakan java.sql.Date.valueOf(java.lang. String) untuk menghuraikan rentetan tarikh dalam format yyyy-[m]m-[d]d, cth.:

    ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
    Salin selepas log masuk
  • java.util.Date: Tukar objek java.util.Date menggunakan java.sql.Date(endDate.getTime() baharu ), cth.:

    ps.setDate(2, new java.sql.Date(endDate.getTime()));
    Salin selepas log masuk
  • Semasa: Gunakan java.sql.Date(System.currentTimeMillis()) untuk memasukkan tarikh semasa atau java.sql.Date.valueOf (java.time.LocalDate.now()) dalam Java 8 dan di atas.

Menggunakan java.sql.Timestamp

Jika lajur jadual mempunyai jenis TIMESTAMP atau DATETIME, pilihan berikut ialah tersedia:

  • java.lang.String: Gunakan java.sql.Timestamp.valueOf(java.lang.String) untuk menghuraikan rentetan tarikh dalam format yyyy -[m]m-[d]d hh:mm:ss[.f…], cth.:

    ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00"));
    Salin selepas log masuk
  • java.util.Date: Tukar objek java.util.Date menggunakan java.sql.Timestamp(endDate.getTime() baharu ), cth.:

    ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
    Salin selepas log masuk
  • Semasa: Gunakan java.sql.Timestamp(System.currentTimeMillis()) baharu, java.sql.Timestamp.from(java.time.Instant .sekarang()), atau java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()) dalam Java 8 dan ke atas untuk memasukkan cap masa semasa.

Atas ialah kandungan terperinci Bagaimana untuk Menggunakan setDate() dengan betul dalam PreparedStatements untuk Mengelakkan `java.lang.IllegalArgumentException`?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Artikel terbaru oleh pengarang
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan