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
Barbara Streisandasal
2024-12-10 18:43:10767semak imbas

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));

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)

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"));
  • 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()));
  • 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"));
  • 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()));
  • 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:
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