JDBC - Tipos de Dados
O driver JDBC converte o tipo de dados Java no tipo JDBC apropriado, antes de enviá-lo ao banco de dados. Ele usa um mapeamento padrão para a maioria dos tipos de dados. Por exemplo, um Java int é convertido em SQL INTEGER. Os mapeamentos padrão foram criados para fornecer consistência entre os drivers.
A tabela a seguir resume o tipo de dados JDBC padrão para o qual o tipo de dados Java é convertido, quando você chama o método setXXX () do objeto PreparedStatement ou CallableStatement ou o método ResultSet.updateXXX ().
SQL | JDBC / Java | setXXX | updateXXX |
---|---|---|---|
VARCHAR | java.lang.String | setString | updateString |
CARACTERES | java.lang.String | setString | updateString |
LONGVARCHAR | java.lang.String | setString | updateString |
MORDEU | boleano | setBoolean | updateBoolean |
NUMÉRICO | java.math.BigDecimal | setBigDecimal | updateBigDecimal |
TINYINT | byte | setByte | updateByte |
SMALLINT | baixo | setShort | updateShort |
INTEIRO | int | setInt | updateInt |
BIGINT | grandes | setLong | updateLong |
REAL | flutuador | setFloat | updateFloat |
FLUTUADOR | flutuador | setFloat | updateFloat |
EM DOBRO | em dobro | setDouble | updateDouble |
VARBINÁRIO | byte [] | setBytes | updateBytes |
BINÁRIO | byte [] | setBytes | updateBytes |
ENCONTRO | java.sql.Date | setDate | data de atualização |
TEMPO | java.sql.Time | definir tempo | tempo de atualização |
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 |
ESTRUTURA | java.sql.Struct | SetStruct | updateStruct |
O JDBC 3.0 aprimorou o suporte para os tipos de dados BLOB, CLOB, ARRAY e REF. O objeto ResultSet agora possui os métodos updateBLOB (), updateCLOB (), updateArray () e updateRef () que permitem que você manipule diretamente os respectivos dados no servidor.
Os métodos setXXX () e updateXXX () permitem converter tipos específicos de Java em tipos de dados JDBC específicos. Os métodos, setObject () e updateObject (), permitem mapear quase qualquer tipo de Java para um tipo de dados JDBC.
O objeto ResultSet fornece o método getXXX () correspondente para cada tipo de dados para recuperar o valor da coluna. Cada método pode ser usado com o nome da coluna ou por sua posição ordinal.
SQL | JDBC / Java | setXXX | getXXX |
---|---|---|---|
VARCHAR | java.lang.String | setString | getString |
CARACTERES | java.lang.String | setString | getString |
LONGVARCHAR | java.lang.String | setString | getString |
MORDEU | boleano | setBoolean | getBoolean |
NUMÉRICO | java.math.BigDecimal | setBigDecimal | getBigDecimal |
TINYINT | byte | setByte | getByte |
SMALLINT | baixo | setShort | getShort |
INTEIRO | int | setInt | getInt |
BIGINT | grandes | setLong | getLong |
REAL | flutuador | setFloat | getFloat |
FLUTUADOR | flutuador | setFloat | getFloat |
EM DOBRO | em dobro | setDouble | getDouble |
VARBINÁRIO | byte [] | setBytes | getBytes |
BINÁRIO | byte [] | setBytes | getBytes |
ENCONTRO | java.sql.Date | setDate | getDate |
TEMPO | java.sql.Time | definir tempo | consiga tempo |
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 |
ESTRUTURA | java.sql.Struct | SetStruct | getStruct |
Tipos de dados de data e hora
A classe java.sql.Date mapeia para o tipo SQL DATE e as classes java.sql.Time e java.sql.Timestamp mapeiam para os tipos de dados SQL TIME e SQL TIMESTAMP, respectivamente.
O exemplo a seguir mostra como as classes Date e Time formatam os valores de data e hora Java padrão para corresponder aos requisitos de tipo de dados 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
Agora vamos compilar o exemplo acima da seguinte maneira -
C:\>javac SqlDateTime.java
C:\>
Quando você corre JDBCExample, ele produz o seguinte resultado -
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:\>
Tratamento de valores NULL
O uso de valores NULL pelo SQL e o uso de nulos pelo Java são conceitos diferentes. Portanto, para lidar com valores SQL NULL em Java, existem três táticas que você pode usar -
Evite usar métodos getXXX () que retornam tipos de dados primitivos.
Use classes de wrapper para tipos de dados primitivos e use o método wasNull () do objeto ResultSet para testar se a variável de classe de wrapper que recebeu o valor retornado pelo método getXXX () deve ser definida como nula.
Use tipos de dados primitivos e o método wasNull () do objeto ResultSet para testar se a variável primitiva que recebeu o valor retornado pelo método getXXX () deve ser definida como um valor aceitável que você escolheu para representar um NULL.
Aqui está um exemplo para lidar com um valor 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;
}