JDBC 数据类型
2018-03-21 13:50 更新
JDBC教程 - JDBC数据类型
Java有一个数据类型系统,例如,int,long,float,double,string。
数据库系统也有一个类型系统,如int,char,varchar,text,blob,clob。
JDBC驱动程序可以将Java数据类型来回转换为适当的数据库类型。
下表列出了缺省数据库数据类型和Java数据类型映射。
当从PreparedStatement或CallableStatement对象或ResultSet.updateXXX()/getXXX()方法调用setXXX()方法时,将使用该映射。
| SQL | JDBC / Java | setXXX | setXXX... | updateXXX |
|---|---|---|---|---|
| VARCHAR | java.lang.String | setString | getString | updateString |
| CHAR | java.lang.String | setString | getString | updateString |
| LONGVARCHAR | java.lang.String | setString | updateString | |
| BIT | boolean | setBoolean | getBoolean | updateBoolean |
| NUMERIC | java.math.BigDecimal | setBigDecimal | getBigDecimal | updateBigDecimal |
| TINYINT | byte | setByte | getByte | updateByte |
| SMALLINT | short | setShort | getShort | updateShort |
| INTEGER | int | setInt | getInt | updateInt |
| BIGINT | long | setLong | getLong | updateLong |
| REAL | float | setFloat | getFloat | updateFloat |
| FLOAT | float | setFloat | getFloat | updateFloat |
| DOUBLE | double | setDouble | getDouble | updateDouble |
| VARBINARY | byte [] | setBytes | getBytes | updateBytes |
| BINARY | byte[] | setBytes | getBytes | updateBytes |
| DATE | java.sql.Date | setDate | getDate | updateDate |
| TIME | java.sql.Time | setTime | getTime | updateTime |
| TIMESTAMP | java.sql.Timestamp | setTimestamp | getTimestamp | updateTimestamp |
| CLOB | java.sql.Clob | setClob | getClob | updateClob |
| BLOB | java.sql.Blob | setBlob | getBlob | updateBlob |
| ARRAY | java.sql.Array | setARRAY | getARRAY | updateARRAY |
| REF | java.sql.Ref | setRef | getRef | updateRef |
| STRUCT | java.sql.Struct | setStruct | getStruct | updateStruct |
例子
以下示例显示如何转换Java日期和时间类以匹配SQL数据类型。
public class Main {
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());
}
}
上面的代码生成以下结果。

处理NULL值
SQL使用NULL值表示空,而Java空表示没有分配内存。
要正确处理来自数据库的NULL值,我们应该避免使用返回原始数据类型的getXXX()方法。由于JDBC驱动程序可能将NULL值转换为0,并且我们可能在同一列中具有0值。
或者我们可以使用ResultSet中的wasNull()方法来检查该值是否为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; // or -1
}
SQL时间戳
Oracle数据库中的简单表脚本。
CREATE TABLE Person ( USER_ID NUMBER (5) NOT NULL, USERNAME VARCHAR2 (20) NOT NULL, CREATED_BY VARCHAR2 (20) NOT NULL, CREATED_DATE DATE NOT NULL, PRIMARY KEY ( USER_ID ) )
使用PreparedStatement 中的setTimestamp 将Timestamp插入到数据库。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
public class Main {
private static final String DB_DRIVER = "oracle.jdbc.driver.OracleDriver";
private static final String DB_CONNECTION = "jdbc:oracle:thin:@localhost:1521:YourDatabase";
private static final String DB_USER = "user";
private static final String DB_PASSWORD = "password";
public static void main(String[] argv) throws Exception {
Class.forName(DB_DRIVER);
Connection dbConnection = DriverManager.getConnection(DB_CONNECTION,
DB_USER, DB_PASSWORD);
PreparedStatement preparedStatement = null;
java.util.Date today = new java.util.Date();
String insertTableSQL = "INSERT INTO DBUSER"
+ "(USER_ID, USERNAME, CREATED_BY, CREATED_DATE) VALUES"
+ "(?,?,?,?)";
preparedStatement = dbConnection.prepareStatement(insertTableSQL);
preparedStatement.setTimestamp(4,new java.sql.Timestamp(today.getTime()));
dbConnection.commit();
dbConnection.close();
}
}
或者我们可以使用 setDate 方法。
java.util.Date today = new java.util.Date(); preparedStatement.setDate(4, new java.sql.Date(today.getTime()));
以上内容是否对您有帮助:

免费 AI IDE


更多建议: