Méthode setDate() de PreparedStatement : meilleures pratiques pour éviter les erreurs
La migration vers des instructions préparées améliore la cohérence du code, mais l'utilisation de setDate()
peut parfois entraîner des erreurs IllegalArgumentException
. Examinons comment éviter ces problèmes.
Considérez cet extrait de code problématique :
<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>
Le IllegalArgumentException
provient probablement d'une mauvaise gestion des dates. Évitez d'utiliser date.valueOf()
avec des chaînes au format incohérent et une initialisation de date incorrecte.
Approches correctes en utilisant java.sql.Date
et java.sql.Timestamp
Voici comment utiliser correctement setDate()
et setTimestamp()
pour différents types de colonnes de base de données :
Pour les colonnes DATE :
ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
(Assurez-vous du format "AAAA-MM-JJ")ps.setDate(2, new java.sql.Date(endDate.getTime()));
ps.setDate(2, new java.sql.Date(System.currentTimeMillis()));
Pour les colonnes TIMESTAMP ou DATETIME :
ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00"));
(Assurez-vous du format "AAAA-MM-JJ HH:mm:ss")ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
ps.setTimestamp(2, new java.sql.Timestamp(System.currentTimeMillis()));
En adhérant à ces bonnes pratiques et en utilisant les types et formats de données appropriés, vous pouvez utiliser de manière fiable setDate()
et setTimestamp()
dans vos déclarations préparées, évitant ainsi les erreurs IllegalArgumentException
et garantissant l'intégrité des données. N'oubliez pas de toujours faire correspondre vos formats de chaîne date/heure aux attentes de la base de données.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!