Maison > base de données > tutoriel mysql > Comment utiliser correctement setDate() dans PreparedStatements pour éviter IllegalArgumentException ?

Comment utiliser correctement setDate() dans PreparedStatements pour éviter IllegalArgumentException ?

DDD
Libérer: 2025-01-18 22:36:11
original
228 Les gens l'ont consulté

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

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>
Copier après la connexion

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 :

  • Utilisation d'une chaîne : ps.setDate(2, java.sql.Date.valueOf("2013-09-04")); (Assurez-vous du format "AAAA-MM-JJ")
  • Utilisation d'un java.util.Date : ps.setDate(2, new java.sql.Date(endDate.getTime()));
  • En utilisant la date actuelle : ps.setDate(2, new java.sql.Date(System.currentTimeMillis()));

Pour les colonnes TIMESTAMP ou DATETIME :

  • Utilisation d'une chaîne : ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00")); (Assurez-vous du format "AAAA-MM-JJ HH:mm:ss")
  • Utilisation d'un java.util.Date : ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
  • Utilisation de l'horodatage actuel : 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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal