JDBC - Datentypen

Der JDBC-Treiber konvertiert den Java-Datentyp in den entsprechenden JDBC-Typ, bevor er an die Datenbank gesendet wird. Für die meisten Datentypen wird eine Standardzuordnung verwendet. Beispielsweise wird ein Java-Int in einen SQL-INTEGER konvertiert. Standardzuordnungen wurden erstellt, um die Konsistenz zwischen den Treibern zu gewährleisten.

In der folgenden Tabelle ist der Standard-JDBC-Datentyp zusammengefasst, in den der Java-Datentyp konvertiert wird, wenn Sie die setXXX () -Methode des PreparedStatement- oder CallableStatement-Objekts oder die ResultSet.updateXXX () -Methode aufrufen.

SQL JDBC / Java setXXX updateXXX
VARCHAR java.lang.String setString updateString
VERKOHLEN java.lang.String setString updateString
LONGVARCHAR java.lang.String setString updateString
BISSCHEN Boolescher Wert setBoolean updateBoolean
NUMERISCH java.math.BigDecimal setBigDecimal updateBigDecimal
Winzig Byte setByte updateByte
SMALLINT kurz setShort updateShort
GANZE ZAHL int setInt updateInt
BIGINT lange setLong updateLong
ECHT schweben setFloat updateFloat
SCHWEBEN schweben setFloat updateFloat
DOPPELT doppelt setDouble updateDouble
VARBINARY Byte [] setBytes updateBytes
BINÄR Byte [] setBytes updateBytes
DATUM java.sql.Date Datum einstellen Aktualisierungsdatum
ZEIT java.sql.Time Zeit einstellen Updatezeit
TIMESTAMP java.sql.Timestamp setTimestamp updateTimestamp
CLOB java.sql.Clob setClob updateClob
KLECKS java.sql.Blob setBlob updateBlob
ARRAY java.sql.Array setARRAY updateARRAY
REF java.sql.Ref SetRef updateRef
STRUKT java.sql.Struct SetStruct updateStruct

JDBC 3.0 bietet erweiterte Unterstützung für die Datentypen BLOB, CLOB, ARRAY und REF. Das ResultSet-Objekt verfügt jetzt über die Methoden updateBLOB (), updateCLOB (), updateArray () und updateRef (), mit denen Sie die entsprechenden Daten auf dem Server direkt bearbeiten können.

Mit den Methoden setXXX () und updateXXX () können Sie bestimmte Java-Typen in bestimmte JDBC-Datentypen konvertieren. Mit den Methoden setObject () und updateObject () können Sie fast jeden Java-Typ einem JDBC-Datentyp zuordnen.

Das ResultSet-Objekt bietet für jeden Datentyp die entsprechende Methode getXXX (), um den Spaltenwert abzurufen. Jede Methode kann mit Spaltennamen oder anhand ihrer Ordnungsposition verwendet werden.

SQL JDBC / Java setXXX getXXX
VARCHAR java.lang.String setString getString
VERKOHLEN java.lang.String setString getString
LONGVARCHAR java.lang.String setString getString
BISSCHEN Boolescher Wert setBoolean getBoolean
NUMERISCH java.math.BigDecimal setBigDecimal getBigDecimal
Winzig Byte setByte getByte
SMALLINT kurz setShort getShort
GANZE ZAHL int setInt getInt
BIGINT lange setLong getLong
ECHT schweben setFloat getFloat
SCHWEBEN schweben setFloat getFloat
DOPPELT doppelt setDouble getDouble
VARBINARY Byte [] setBytes getBytes
BINÄR Byte [] setBytes getBytes
DATUM java.sql.Date Datum einstellen Verabredung bekommen
ZEIT java.sql.Time Zeit einstellen Zeit bekommen
TIMESTAMP java.sql.Timestamp setTimestamp getTimestamp
CLOB java.sql.Clob setClob getClob
KLECKS java.sql.Blob setBlob getBlob
ARRAY java.sql.Array setARRAY getARRAY
REF java.sql.Ref SetRef getRef
STRUKT java.sql.Struct SetStruct getStruct

Datums- und Uhrzeitdatentypen

Die Klassen java.sql.Date werden dem SQL DATE-Typ zugeordnet, und die Klassen java.sql.Time und java.sql.Timestamp werden den Datentypen SQL TIME bzw. SQL TIMESTAMP zugeordnet.

Das folgende Beispiel zeigt, wie die Datums- und Zeitklassen die Standardwerte für Datum und Uhrzeit in Java so formatieren, dass sie den Anforderungen des SQL-Datentyps entsprechen.

import java.sql.Date;
import java.sql.Time;
import java.sql.Timestamp;
import java.util.*;

public class SqlDateTime {
   public static void main(String[] args) {
      //Get standard date and time
      java.util.Date javaDate = new java.util.Date();
      long javaTime = javaDate.getTime();
      System.out.println("The Java Date is:" + 
             javaDate.toString());

      //Get and display SQL DATE
      java.sql.Date sqlDate = new java.sql.Date(javaTime);
      System.out.println("The SQL DATE is: " + 
             sqlDate.toString());

      //Get and display SQL TIME
      java.sql.Time sqlTime = new java.sql.Time(javaTime);
      System.out.println("The SQL TIME is: " + 
             sqlTime.toString());
      //Get and display SQL TIMESTAMP
      java.sql.Timestamp sqlTimestamp =
      new java.sql.Timestamp(javaTime);
      System.out.println("The SQL TIMESTAMP is: " + 
             sqlTimestamp.toString());
     }//end main
}//end SqlDateTime

Lassen Sie uns nun das obige Beispiel wie folgt zusammenstellen:

C:\>javac SqlDateTime.java
C:\>

Wenn du rennst JDBCExampleerzeugt es das folgende Ergebnis -

C:\>java SqlDateTime
The Java Date is:Tue Aug 18 13:46:02 GMT+04:00 2009
The SQL DATE is: 2009-08-18
The SQL TIME is: 13:46:02
The SQL TIMESTAMP is: 2009-08-18 13:46:02.828
C:\>

Umgang mit NULL-Werten

Die Verwendung von NULL-Werten durch SQL und die Verwendung von Null durch Java sind unterschiedliche Konzepte. Um mit SQL NULL-Werten in Java umzugehen, können Sie drei Taktiken anwenden:

  • Vermeiden Sie die Verwendung von getXXX () -Methoden, die primitive Datentypen zurückgeben.

  • Verwenden Sie Wrapper-Klassen für primitive Datentypen und testen Sie mit der wasNull () -Methode des ResultSet-Objekts, ob die Wrapper-Klassenvariable, die den von der getXXX () -Methode zurückgegebenen Wert erhalten hat, auf null gesetzt werden soll.

  • Verwenden Sie primitive Datentypen und die wasNull () -Methode des ResultSet-Objekts, um zu testen, ob die primitive Variable, die den von der getXXX () -Methode zurückgegebenen Wert erhalten hat, auf einen akzeptablen Wert gesetzt werden soll, den Sie als NULL-Wert ausgewählt haben.

Hier ist ein Beispiel für die Behandlung eines NULL-Werts:

Statement stmt = conn.createStatement( );
String sql = "SELECT id, first, last, age FROM Employees";
ResultSet rs = stmt.executeQuery(sql);

int id = rs.getInt(1);
if( rs.wasNull( ) ) {
   id = 0;
}