Rumah >pangkalan data >tutorial mysql >Bagaimana untuk Menggunakan setDate() dengan betul dalam PreparedStatements untuk Mengelakkan IllegalArgumentException?

Bagaimana untuk Menggunakan setDate() dengan betul dalam PreparedStatements untuk Mengelakkan IllegalArgumentException?

DDD
DDDasal
2025-01-18 22:36:11275semak imbas

How to Correctly Use setDate() in PreparedStatements to Avoid IllegalArgumentException?

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:

  • Menggunakan Rentetan: ps.setDate(2, java.sql.Date.valueOf("2013-09-04")); (Pastikan format "YYYY-MM-DD")
  • Menggunakan java.util.Date: ps.setDate(2, new java.sql.Date(endDate.getTime()));
  • Menggunakan tarikh semasa: ps.setDate(2, new java.sql.Date(System.currentTimeMillis()));

Untuk lajur TIMESTAMP atau DATETIME:

  • Menggunakan Rentetan: ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00")); (Pastikan format "YYYY-MM-DD HH:mm:ss")
  • Menggunakan java.util.Date: ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
  • Menggunakan cap masa semasa: 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!

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