English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية
El driver JDBC convierte los tipos de datos Java en tipos JDBC adecuados antes de enviarlos a la base de datos. Utiliza mapeos por defecto para la mayoría de los tipos de datos. Por ejemplo, convierte Java int a SQL INTEGER. Se crearon estos mapeos por defecto para proporcionar consistencia entre los drivers.
Cuando se llama a los métodos setXXX() de los objetos PreparedStatement o CallableStatement o a los métodos updateXXX() de ResultSet, la siguiente tabla resume la conversión de tipos de datos Java a tipos de datos JDBC por defecto.
de SQL | JDBC / Java | setXXX | Actualizar XXX |
---|---|---|---|
VARCHAR | java.lang.String | setString | updateString |
CHAR | java.lang.String | setString | updateString |
LONGVARCHAR | java.lang.String | setString | updateString |
BIT | boolean | setBoolean | updateBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | updateBigDecimal |
TINYINT | byte | setByte | updateByte |
SMALLINT | short | setShort | updateShort |
INTEGER | int | setInt | updateInt |
BIGINT | long | setLong | updateLong |
REAL | float | setFloat | updateFloat |
FLOAT | float | setFloat | updateFloat |
DOUBLE | double | setDouble | updateDouble |
VARBINARY | byte[ ] | setBytes | updateBytes |
BINARY | byte[ ] | setBytes | updateBytes |
DATE | java.sql.Date | setDate | updateDate |
TIME | java.sql.Time | setTime | updateTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | updateTimestamp |
CLOB | java.sql.Clob | setClob | updateClob |
BLOB | java.sql.Blob | setBlob | updateBlob |
ARRAY | java.sql.Array | setARRAY | updateARRAY |
REF | java.sql.Ref | SetRef | updateRef |
STRUCT | java.sql.Struct | SetStruct | updateStruct |
JDBC 3.0 Mejora el soporte para los tipos de datos BLOB, CLOB, ARRAY y REF. El objeto ResultSet ahora tiene métodos updateBLOB(), updateCLOB(), updateArray() y updateRef(), lo que le permite operar directamente con los datos correspondientes en el servidor.
Con los métodos setXXX() y updateXXX(), se puede convertir un tipo de Java específico en un tipo de datos JDBC específico. Con los métodos setObject() y updateObject(), se puede mapear casi cualquier tipo de Java a un tipo de datos JDBC.
El objeto ResultSet proporciona métodos getXXX () correspondientes para cada tipo de datos para recuperar valores de columnas. Cada método se puede usar junto con el nombre de la columna o su posición numérica.
de SQL | JDBC / Java | setXXX | getXXX |
---|---|---|---|
VARCHAR | java.lang.String | setString | getString |
CHAR | java.lang.String | setString | getString |
LONGVARCHAR | java.lang.String | setString | getString |
BIT | boolean | setBoolean | getBoolean |
NUMERIC | java.math.BigDecimal | setBigDecimal | getBigDecimal |
TINYINT | byte | setByte | getByte |
SMALLINT | short | setShort | getShort |
INTEGER | int | setInt | getInt |
BIGINT | long | setLong | getLong |
REAL | float | setFloat | getFloat |
FLOAT | float | setFloat | getFloat |
DOUBLE | double | setDouble | getDouble |
VARBINARY | byte[ ] | setBytes | getBytes |
BINARY | byte[ ] | setBytes | getBytes |
DATE | java.sql.Date | setDate | getDate |
TIME | java.sql.Time | setTime | getTime |
TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp |
CLOB | java.sql.Clob | setClob | getClob |
BLOB | java.sql.Blob | setBlob | getBlob |
ARRAY | java.sql.Array | setARRAY | getARRAY |
REF | java.sql.Ref | SetRef | getRef |
STRUCT | java.sql.Struct | SetStruct | getStruct |
java.sql.Date映射到SQL DATE类型,而java.sql.Time和java.sql.Timestamp类分别映射到SQL TIME和SQL TIMESTAMP数据类型。
下面的示例显示Date和Time类如何格式化标准Java日期和时间值以匹配SQL数据类型要求。
import java.sql.Date; import java.sql.Time; import java.sql.Timestamp; import java.util.*; public class SqlDateTime { public static void main(String[] args) { //获取标准日期和时间 java.util.Date javaDate = new java.util.Date(); long javaTime = javaDate.getTime(); System.out.println("The Java Date is:") + javaDate.toString()); //获取并显示SQL DATE java.sql.Date sqlDate = new java.sql.Date(javaTime); System.out.println("The SQL DATE is: " + sqlDate.toString()); //获取并显示SQL TIME java.sql.Time sqlTime = new java.sql.Time(javaTime); System.out.println("The SQL TIME is: " + sqlTime.toString()); //获取并显示SQL TIMESTAMP java.sql.Timestamp sqlTimestamp = new java.sql.Timestamp(javaTime); System.out.println("The SQL TIMESTAMP is: " + sqlTimestamp.toString()); }//结束main }//结束SqlDateTime
现在让我们编译上面的示例,如下所示:
C:\>javac SqlDateTime.java C:\>
运行时JDBCExample,它将产生以下结果-
C:\>java SqlDateTime La fecha Java es:Mar Aug 18 13:46:02 GMT+04:00 2009 El DATE SQL es: 2009-08-18 El TIME SQL es: 13:46:02 El TIMESTAMP SQL es: 2009-08-18 13:46:02.828 C:\>
El uso de NULL en SQL y el uso de null en Java son conceptos diferentes. Por lo tanto, para manejar valores NULL en Java, se pueden utilizar tres estrategias-
Evite usar métodos que devuelven tipos de datos originales.
Para probar si el valor devuelto por el método getXXX() debe establecerse en null para la variable de tipo de datos envolvente, utilice el método wasNull() del objeto ResultSet.
Para probar si el valor devuelto por el método getXXX() debe establecerse en un valor aceptable representativo de NULL para la variable de tipo de datos original, utilice el método wasNull() del objeto ResultSet.
Este es un ejemplo de cómo manejar valores NULL-
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; }