📅  最后修改于: 2020-11-13 04:34:56             🧑  作者: Mango
JDBC驱动程序在将Java数据类型发送到数据库之前将其转换为适当的JDBC类型。它对大多数数据类型使用默认映射。例如,将Java int转换为SQL INTEGER。创建了默认映射以提供驱动程序之间的一致性。
下表总结了当您调用PreparedStatement或CallableStatement对象的setXXX()方法或ResultSet.updateXXX()方法时,Java数据类型转换为的默认JDBC数据类型。
SQL | JDBC/Java | setXXX | updateXXX |
---|---|---|---|
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增强了对BLOB,CLOB,ARRAY和REF数据类型的支持。 ResultSet对象现在具有updateBLOB(),updateCLOB(),updateArray()和updateRef()方法,使您可以直接操作服务器上的相应数据。
使用setXXX()和updateXXX()方法可以将特定的Java类型转换为特定的JDBC数据类型。使用setObject()和updateObject()方法,您可以将几乎所有Java类型映射到JDBC数据类型。
ResultSet对象为每种数据类型提供相应的getXXX()方法以检索列值。每种方法都可以与列名或按其顺序位置一起使用。
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) {
//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
现在让我们编译以上示例,如下所示:
C:\>javac SqlDateTime.java
C:\>
当您运行JDBCExample时,它将产生以下结果-
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:\>
SQL对NULL值的使用和Java对null的使用是不同的概念。因此,要处理Java中的SQL NULL值,可以使用三种策略-
避免使用返回原始数据类型的getXXX()方法。
将包装器类用于原始数据类型,并使用ResultSet对象的wasNull()方法测试是否将接收getXXX()方法返回的值的包装器类变量设置为null。
使用原始数据类型和ResultSet对象的wasNull()方法来测试接收getXXX()方法返回的值的原始变量是否应设置为您选择的代表NULL的可接受值。
这是处理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;
}