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()));
以上内容是否对您有帮助:
更多建议: