您现在的位置是:首页 > 技术教程 正文

第九节 JDBC数据类型

admin 阅读: 2024-03-22
后台-插件-广告管理-内容页头部广告(手机)

JDBC驱动程序将Java数据类型转换为适当的JDBC类型,然后将其发送到数据库。 它为大多数数据类型提供并使用默认映射。 例如,Java int类型会被转换为SQL INTEGER。 创建默认映射以提供到驱动程序时保持一致性。

下表总结了当调用PreparedStatement或CallableStatement对象或ResultSet.updateXXX()方法的setXXX()方法时,将Java数据类型转换为的默认JDBC数据类型。

SQL类型JDBC/Java类型setXXXupdateXXX
VARCHARjava.lang.StringsetStringupdateString
CHARjava.lang.StringsetStringupdateString
LONGVARCHARjava.lang.StringsetStringupdateString
BITbooleansetBooleanupdateBoolean
NUMERICjava.math.BigDecimalsetBigDecimalupdateBigDecimal
TINYINTbytesetByteupdateByte
SMALLINTshortsetShortupdateShort
INTEGERintsetIntupdateInt
BIGINTlongsetLongupdateLong
REALfloatsetFloatupdateFloat
FLOATfloatsetFloatupdateFloat
DOUBLEdoublesetDoubleupdateDouble
VARBINARYbyte[ ]setBytesupdateBytes
BINARYbyte[ ]setBytesupdateBytes
DATEjava.sql.DatesetDateupdateDate
TIMEjava.sql.TimesetTimeupdateTime
TIMESTAMPjava.sql.TimestampsetTimestampupdateTimestamp
CLOBjava.sql.ClobsetClobupdateClob
BLOBjava.sql.BlobsetBlobupdateBlob
ARRAYjava.sql.ArraysetARRAYupdateARRAY
REFjava.sql.RefSetRefupdateRef
STRUCTjava.sql.StructSetStructupdateStruct

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类型setXXXupdateXXX
VARCHARjava.lang.StringsetStringgetString
CHARjava.lang.StringsetStringgetString
LONGVARCHARjava.lang.StringsetStringgetString
BITbooleansetBooleangetBoolean
NUMERICjava.math.BigDecimalsetBigDecimalgetBigDecimal
TINYINTbytesetBytegetByte
SMALLINTshortsetShortgetShort
INTEGERintsetIntgetInt
BIGINTlongsetLonggetLong
REALfloatsetFloatgetFloat
FLOATfloatsetFloatgetFloat
DOUBLEdoublesetDoublegetDouble
VARBINARYbyte[ ]setBytesgetBytes
BINARYbyte[ ]setBytesgetBytes
DATEjava.sql.DatesetDategetDate
TIMEjava.sql.TimesetTimegetTime
TIMESTAMPjava.sql.TimestampsetTimestampgetTimestamp
CLOBjava.sql.ClobsetClobgetClob
BLOBjava.sql.BlobsetBlobgetBlob
ARRAYjava.sql.ArraysetARRAYgetARRAY
REFjava.sql.RefSetRefgetRef
STRUCTjava.sql.StructSetStructgetStruct

日期和时间数据类型

java.sql.Date类映射到SQL DATE类型,java.sql.Time和java.sql.Timestamp类分别映射到SQL TIME和SQL TIMESTAMP数据类型。

以下示例显示了Date和Time类如何格式化为标准Java日期和时间值以匹配SQL数据类型要求。

  1. import java.sql.Date;
  2. import java.sql.Time;
  3. import java.sql.Timestamp;
  4. import java.util.*;
  5. public class SqlDateTime {
  6. public static void main(String[] args) {
  7. //Get standard date and time
  8. java.util.Date javaDate = new java.util.Date();
  9. long javaTime = javaDate.getTime();
  10. System.out.println("The Java Date is:" +
  11. javaDate.toString());
  12. //Get and display SQL DATE
  13. java.sql.Date sqlDate = new java.sql.Date(javaTime);
  14. System.out.println("The SQL DATE is: " +
  15. sqlDate.toString());
  16. //Get and display SQL TIME
  17. java.sql.Time sqlTime = new java.sql.Time(javaTime);
  18. System.out.println("The SQL TIME is: " +
  19. sqlTime.toString());
  20. //Get and display SQL TIMESTAMP
  21. java.sql.Timestamp sqlTimestamp =
  22. new java.sql.Timestamp(javaTime);
  23. System.out.println("The SQL TIMESTAMP is: " +
  24. sqlTimestamp.toString());
  25. }//end main
  26. }//end SqlDateTime

Java

编译并执行上面代码,得到以下结果 -

  1. F:\worksp\jdbc>javac SqlDateTime.java
  2. F:\worksp\jdbc>java SqlDateTime
  3. The Java Date is:Wed May 31 23:54:57 CST 2017
  4. The SQL DATE is: 2017-05-31
  5. The SQL TIME is: 23:54:57
  6. The SQL TIMESTAMP is: 2017-05-31 23:54:57.937
  7. F:\worksp\jdbc>

Shell

处理NULL值

SQL使用NULL值和Java使用null是不同的概念。 所以,要在Java中处理SQL NULL值,可以使用三种策略 -

  • 避免使用返回原始数据类型的getXXX()方法。
  • 对原始数据类型使用包装类,并使用ResultSet对象的wasNull()方法来测试接收getXXX()方法的返回值的包装器类变量是否应设置为null。
  • 使用原始数据类型和ResultSet对象的wasNull()方法来测试接收到由getXXX()方法返回的值的原始变量是否应设置为表示NULL的可接受值。

下面是一个用来处理NULL值的例子 -

  1. Statement stmt = conn.createStatement( );
  2. String sql = "SELECT id, first, last, age FROM Employees";
  3. ResultSet rs = stmt.executeQuery(sql);
  4. int id = rs.getInt(1);
  5. if( rs.wasNull( ) ) {
  6. id = 0;
  7. }

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜