Heim >Java >javaLernprogramm >Wie verwende ich setDate() in PreparedStatements richtig, um „java.lang.IllegalArgumentException' zu vermeiden?

Wie verwende ich setDate() in PreparedStatements richtig, um „java.lang.IllegalArgumentException' zu vermeiden?

Barbara Streisand
Barbara StreisandOriginal
2024-12-10 18:43:10748Durchsuche

How to Correctly Use setDate() in PreparedStatements to Avoid `java.lang.IllegalArgumentException`?

Verwendung von setDate in PreparedStatement

Um unsere Codebasis zu standardisieren, wurden wir damit beauftragt, alle Instanzen hartcodierter SQL-Variablen auf zu übertragen Vorbereitete Anweisungen mit gebundenen Variablen. Wir sind jedoch auf ein Problem mit der Methode setDate() gestoßen.

Der bereitgestellte Codeausschnitt lautet wie folgt:

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));

Beim Ausführen der SQL-Abfrage ist der folgende Fehler aufgetreten:

java.lang.IllegalArgumentException
at java.sql.Date.valueOf(Date.java:138)
at com.cmsi.eValuate.TAF.TAFModuleMain.CallTAF(TAFModuleMain.java:1211)

Lösung

Die Die Methode setDate() erfordert einen gültigen Datumswert. In diesem Fall haben wir es auf new java.sql.Date(0000-00-00) gesetzt, was ein ungültiges Datum ist.

Um dieses Problem zu beheben, können die folgenden Lösungen in Betracht gezogen werden:

Verwenden von java.sql.Date

Wenn die Tabellenspalte eine hat DATE-Typ, die folgenden Optionen sind verfügbar:

  • java.lang.String: Verwenden Sie java.sql.Date.valueOf(java.lang.String) zum Parsen die Datumszeichenfolge im Format jjjj-[m]m-[t]d, z.B.:

    ps.setDate(2, java.sql.Date.valueOf("2013-09-04"));
  • java.util.Date: Konvertieren Sie das java.util.Date-Objekt mit dem neuen java.sql.Date(endDate.getTime() ), z.B.:

    ps.setDate(2, new java.sql.Date(endDate.getTime()));
  • Current: Verwenden Sie new java.sql.Date(System.currentTimeMillis()), um das aktuelle Datum einzufügen, oder java.sql.Date.valueOf (java.time.LocalDate.now()) in Java 8 und oben.

Verwenden von java.sql.Timestamp

Wenn die Tabellenspalte einen TIMESTAMP- oder DATETIME-Typ hat, sind die folgenden Optionen verfügbar verfügbar:

  • java.lang.String: Verwenden Sie java.sql.Timestamp.valueOf(java.lang.String), um die Datumszeichenfolge im Format JJJJ zu analysieren -[m]m-[d]d hh:mm:ss[.f…], z.B.:

    ps.setTimestamp(2, java.sql.Timestamp.valueOf("2013-09-04 13:30:00"));
  • java.util.Date: Konvertieren Sie das java.util.Date-Objekt mit dem neuen java.sql.Timestamp(endDate.getTime()) ), z.B.:

    ps.setTimestamp(2, new java.sql.Timestamp(endDate.getTime()));
  • Current: Verwenden Sie new java.sql.Timestamp(System.currentTimeMillis()), java.sql.Timestamp.from(java.time.Instant .now()) oder java.sql.Timestamp.valueOf(java.time.LocalDateTime.now()) in Java 8 und höher, um den aktuellen Zeitstempel einzufügen.

Das obige ist der detaillierte Inhalt vonWie verwende ich setDate() in PreparedStatements richtig, um „java.lang.IllegalArgumentException' zu vermeiden?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn