Rumah >Java >javaTutorial >Bagaimana untuk Menggunakan setDate() dengan betul dalam PreparedStatements untuk Mengelakkan `java.lang.IllegalArgumentException`?
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)
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:
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()));
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()));
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!