Kaedah setDate() PreparedStatement: Amalan Terbaik untuk Mencegah Ralat
Berhijrah kepada pernyataan yang disediakan meningkatkan ketekalan kod, tetapi penggunaan setDate()
kadangkala boleh menyebabkan ralat IllegalArgumentException
. Mari kita periksa cara untuk mengelakkan isu ini.
Pertimbangkan coretan kod bermasalah ini:
<code class="language-java">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); //Incorrect date initialization 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));</code>
IllegalArgumentException
berkemungkinan berpunca daripada pengendalian tarikh yang tidak betul. Elakkan daripada menggunakan date.valueOf()
dengan rentetan yang tidak konsisten diformatkan dan permulaan tarikh yang salah.
Pendekatan Betul Menggunakan java.sql.Date
dan java.sql.Timestamp
Berikut ialah cara menggunakan setDate()
dan setTimestamp()
dengan betul untuk jenis lajur pangkalan data yang berbeza:
Untuk lajur DATE:
ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
(Pastikan format "YYYY-MM-DD")ps.setDate(2, new java.sql.Date(endDate.getTime()));
ps.setDate(2, new java.sql.Date(System.currentTimeMillis()));
Untuk lajur TIMESTAMP atau DATETIME:
ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00"));
(Pastikan format "YYYY-MM-DD HH:mm:ss")ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
ps.setTimestamp(2, new java.sql.Timestamp(System.currentTimeMillis()));
Dengan mematuhi amalan terbaik ini dan menggunakan jenis dan format data yang sesuai, anda boleh menggunakan setDate()
dan setTimestamp()
dengan pasti dalam penyataan anda yang disediakan, mencegah IllegalArgumentException
ralat dan memastikan integriti data. Ingat untuk sentiasa memadankan format rentetan tarikh/masa anda dengan jangkaan pangkalan data.
Atas ialah kandungan terperinci Bagaimana untuk Menggunakan setDate() dengan betul dalam PreparedStatements untuk Mengelakkan IllegalArgumentException?. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!