English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

类型数据 JDBC

Il driver JDBC converte i tipi di dati Java in tipo di dati JDBC appropriati prima di inviarli al database. Utilizza una mappatura predefinita per molti tipi di dati. Ad esempio, converte Java int in SQL INTEGER. È stata creata una mappatura predefinita per garantire la coerenza tra i driver.

Quando si chiama il metodo setXXX() di un oggetto PreparedStatement o CallableStatement o il metodo updateXXX() di un oggetto ResultSet, la seguente tabella riassume i tipi di dati Java convertiti in tipo di dati JDBC predefiniti.

del SQLJDBC / JavasetXXXAggiornamento XXX
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 ha migliorato il supporto per i tipi di dati BLOB, CLOB, ARRAY e REF. L'oggetto ResultSet ora ha i metodi updateBLOB(), updateCLOB(), updateArray() e updateRef(), che consentono di operare direttamente sui dati corrispondenti sul server.

Utilizzando i metodi setXXX() e updateXXX(), è possibile convertire un tipo Java specifico in un tipo di dati JDBC specifico. Utilizzando i metodi setObject() e updateObject(), è possibile mappare quasi tutti i tipi Java a tipi di dati JDBC.

L'oggetto ResultSet fornisce metodi getXXX () appropriati per ogni tipo di dati per recuperare i valori delle colonne. Ogni metodo può essere utilizzato insieme al nome della colonna o alla sua posizione numerica.

del SQLJDBC / JavasetXXXgetXXX
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

Tipi di dati di data e ora

La classe java.sql.Date viene mappata al tipo SQL DATE, mentre le classi java.sql.Time e java.sql.Timestamp vengono mappate rispettivamente ai tipi SQL TIME e SQL TIMESTAMP.

Esempio seguente mostra come le classi Date e Time formattano i valori di data e ora standard di Java per adattarsi ai requisiti dei tipi di dati 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
The Java Date is:Tue Aug 18 13:46:02 GMT+04:00 2009
Il DATE SQL è: 2009-08-18
Il TIME SQL è: 13:46:02
Il TIMESTAMP SQL è: 2009-08-18 13:46:02.828
C:\>

处理NULL值

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;
}