Utilizzo di tipi di dati di base
Nel driver JDBC per Microsoft SQL Server i tipi di dati JDBC di base vengono utilizzati per convertire i tipi di dati SQL Server in un formato comprensibile nel linguaggio di programmazione Java e viceversa.
A partire dalla versione 2.0, il driver JDBC per Microsoft SQL Server offre il supporto per l'API di JDBC 4.0, che comprende il tipo di dati SQLXML e i tipi di dati nazionali (Unicode) data, tra cui NCHAR, NVARCHAR, LONGNVARCHAR e NCLOB.
Nella tabella seguente sono riportati i mapping predefiniti tra i tipi di dati di base di SQL Server, JDBC e del linguaggio di programmazione Java:
Tipi di SQL Server | Tipi JDBC (java.sql.Types) | Tipi del linguaggio Java |
---|---|---|
bigint |
BIGINT |
long |
timestamp binary |
BINARY |
byte[] |
bit |
BIT |
boolean |
char |
CHAR |
String |
decimal money smallmoney |
DECIMAL |
java.math.BigDecimal |
float |
DOUBLE |
double |
int |
INTEGER |
int |
image varbinary(max) |
LONGVARBINARY |
byte[] |
varchar(max) text |
LONGVARCHAR |
String |
nchar |
CHAR NCHAR (Java SE 6.0) |
String |
nvarchar |
VARCHAR NVARCHAR (Java SE 6.0) |
String |
nvarchar(max) ntext |
LONGVARCHAR LONGNVARCHAR (Java SE 6.0) |
String |
numeric |
NUMERIC |
java.math.BigDecimal |
real |
REAL |
float |
smallint |
SMALLINT |
short |
datetime smalldatetime |
TIMESTAMP |
java.sql.Timestamp |
varbinary udt |
VARBINARY |
byte[] |
varchar |
VARCHAR |
String |
tinyint |
TINYINT |
short |
uniqueidentifier |
CHAR |
String |
xml |
LONGVARCHAR SQLXML (Java SE 6.0) |
String SQLXML |
Nota
Il tipo di dati sqlvariant di SQL Server non è attualmente supportato dal driver JDBC. Se si utilizza una query per recuperare dati da un tabella contenente una colonna con il tipo di dati sqlvariant, verrà generata un'eccezione.
Nelle sezioni seguenti vengono forniti esempi di come sia possibile utilizzare il driver JDBC e i tipi di dati di base. Per un esempio più dettagliato dell'utilizzo dei tipi di dati di base in un'applicazione Java, vedere Esempio di tipi di dati di base.
Recupero di dati in forma di stringa
Se è necessario recuperare dati da un'origine dei dati mappata a uno qualsiasi dei tipi di dati JDBC di base, per visualizzarli come stringa, o se non sono richiesti dati fortemente tipizzati, è possibile utilizzare il metodo getString della classe SQLServerResultSet, come nell'esempio seguente:
String SQL = "SELECT TOP 10 * FROM Person.Contact";
Statement stmt = con.createStatement();
ResultSet rs = stmt.executeQuery(SQL);
while (rs.next()) {
System.out.println(rs.getString(4) + " " + rs.getString(6));
}
rs.close();
stmt.close();
Recupero di dati per tipo di dati
Se è necessario recuperare, da un'origine dei dati, dati di cui si conosce il tipo, è consigliabile utilizzare uno dei metodi get<Type> della classe SQLServerResultSet, noti anche come metodi per il richiamo. Con i metodi get<Type> è possibile utilizzare un nome o un indice di colonna, come nell'esempio seguente:
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee
WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getShort("job_id");
rs.close();
stmt.close();
Nota
I metodi con scala getUnicodeStream e getBigDecimal sono obsoleti e non sono supportati dal driver JDBC.
Aggiornamento di dati per tipo di dati
Se è necessario aggiornare il valore di un campo in un'origine dei dati, è consigliabile utilizzare uno dei metodi update<Type> della classe SQLServerResultSet. Nell'esempio seguente il metodo updateInt viene utilizzato insieme al metodo updateRow per aggiornare i dati nell'origine dei dati:
Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
ResultSet rs = stmt.executeQuery("SELECT lname, job_id FROM employee
WHERE (lname = 'Brown')");
rs.next();
short empJobID = rs.getInt(2);
empJobID++;
rs.first();
rs.updateInt(2, empJobID);
rs.updateRow();
rs.close();
stmt.close();
Nota
Il driver JDBC non è in grado di aggiornare una colonna SQL Server il cui nome contiene più di 127 caratteri. Se si tenta di aggiornare una colonna il cui nome contiene più di 127 caratteri, verrà generata un'eccezione.
Aggiornamento di dati mediante query con parametri
Se è necessario aggiornare dati in un'origine dei dati utilizzando una query con parametri, è possibile impostare il tipo di dati dei parametri utilizzando uno dei metodi set<Type> della classe SQLServerPreparedStatement, noti anche come metodi per l'impostazione. Nell'esempio seguente viene utilizzato il metodo prepareStatement per precompilare la query con parametri, quindi viene utilizzato il metodo setString per impostare il valore stringa del parametro prima di chiamare il metodo executeUpdate.
PreparedStatement pstmt = con.prepareStatement("UPDATE employee SET
fname = ? WHERE (lname = 'Brown')");
String first = "Bob";
pstmt.setString(1, first);
int rowCount = pstmt.executeUpdate();
pstmt.close();
Per ulteriori informazioni sulle query con parametri, vedere Utilizzo di istruzioni SQL con parametri.
Passaggio di parametri a una stored procedure
Se è necessario passare parametri tipizzati in una stored procedure, è possibile impostare i parametri in base all'indice o al nome utilizzando uno dei metodi set<Type> della classe SQLServerCallableStatement. Nell'esempio seguente viene utilizzato il metodo prepareCall per impostare la chiamata alla stored procedure, quindi viene utilizzato il metodo setString per impostare il parametro per la chiamata prima di chiamare il metodo executeQuery.
CallableStatement cstmt = con.prepareCall("{call employee_jobid(?)}");
String lname = "Brown";
cstmt.setString(1, lname);
Resultset rs = cstmt.executeQuery();
rs.close();
cstmt.close();
Nota
In questo esempio viene restituito un set di risultati con i risultati dell'esecuzione della stored procedure.
Per ulteriori informazioni sull'utilizzo del driver JDBC con stored procedure e parametri di input, vedere Utilizzo di una stored procedure con parametri di input.
Recupero di parametri da una stored procedure
Se è necessario recuperare parametri da una stored procedure, occorre innanzitutto registrare un parametro OUT in base al nome o all'indice, utilizzando il metodo registerOutParameter della classe SQLServerCallableStatement, e quindi assegnare il parametro OUT restituito a una variabile appropriata, dopo aver eseguito la chiamata alla stored procedure. Nell'esempio seguente viene utilizzato il metodo prepareCall per impostare la chiamata alla stored procedure, quindi viene utilizzato il metodo registerOutParameter per impostare il parametro OUT e infine viene utilizzato il metodo setString per impostare il parametro per la chiamata prima di chiamare il metodo executeQuery. Il valore restituito dal parametro OUT della stored procedure viene recuperato utilizzando il metodo getShort.
CallableStatement cstmt = con.prepareCall("{call employee_jobid (?, ?)}");
cstmt.registerOutParameter(2, java.sql.Types.SMALLINT);
String lname = "Brown";
cstmt.setString(1, lname);
Resultset rs = cstmt.executeQuery();
short empJobID = cstmt.getShort(2);
rs.close();
cstmt.close();
Nota
Oltre al parametro out, può essere restituito anche un set di risultati con i risultati dell'esecuzione della stored procedure.
Per ulteriori informazioni su come utilizzare il driver JDBC con stored procedure e parametri di output, vedere Utilizzo di una stored procedure con parametri di output.