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