JDBC 基本数据类型是 JDBC 1.0 核心 API 中引入的数据类型。Microsoft SQL Server 2005 JDBC Driver 使用 JDBC 基本数据类型将 SQL Server 数据类型转换为 Java 编程语言能够理解的格式,反之亦然。
下表列出了基本 SQL Server、JDBC 和 Java 编程语言数据类型之间的默认映射:
| SQL Server 类型 | JDBC 类型 (java.sql.Types) | Java 语言类型 |
|---|---|---|
|
bigint |
BIGINT |
long |
|
timestamp binary |
BINARY |
byte[] |
|
bit |
BIT |
boolean |
|
char nchar |
CHAR |
String |
|
decimal money smallmoney |
DECIMAL |
java.math.BigDecimal |
|
float |
DOUBLE |
double |
|
int |
INTEGER |
int |
|
image |
LONGVARBINARY |
byte[] |
|
text ntext |
LONGVARCHAR |
String |
|
numeric |
NUMERIC |
java.math.BigDecimal |
|
real |
REAL |
float |
|
smallint |
SMALLINT |
short |
|
datetime smalldatetime |
TIMESTAMP |
java.sql.Timestamp |
|
varbinary |
VARBINARY |
byte[] |
|
varchar nvarchar |
VARCHAR |
String |
|
tinyint |
TINYINT |
short |
|
uniqueidentifier |
CHAR |
String |
以下几部分提供了如何使用 JDBC 驱动程序和基本数据类型的实例。有关如何在 Java 应用程序中使用基本数据类型的更多详细实例,请参阅基本数据类型示例。
以字符串的格式检索数据
如果必须从映射到任意 JDBC 基本数据类型的数据源检索数据,并以字符串的格式查看这些数据,或者如果不需要强类型的数据,则可以使用 SQLServerResultSet 类的 getString 方法,如下所示:
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();
按数据类型检索数据
如果必须从数据源检索数据,并且已知检索的数据类型,则应该使用 SQLServerResultSet 类的 get<Type> 方法(也称为 getter 方法)之一。通过 get<Type> 方法可以使用列名或列索引,如下所示:
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();
按数据类型更新数据
如果必须更新数据源中字段的值,应使用 SQLServerResultSet 类的 update<Type> 方法之一。在下面的实例中,updateInt 方法与 updateRow 方法结合起来用于更新数据源中的数据:
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();
通过参数化查询来更新数据
如果必须通过使用参数化查询来更新数据源中的数据,可以使用 SQLServerPreparedStatement 类的 set<Type> 方法(也称为 setter 方法)之一来设置参数的数据类型。在下面的实例中,prepareStatement 方法用于预编译参数化查询,然后在调用 executeUpdate 方法前,使用 setString 方法设置参数的字符串值。
PreparedStatement pstmt = con.prepareStatement("UPDATE employee SET
fname = ? WHERE (lname = 'Brown')");
String first = "Bob";
pstmt.setString(1, first);
int rowCount = pstmt.executeUpdate();
pstmt.close();
有关参数化查询的详细信息,请参阅使用带参数的 SQL 语句。
向存储过程传递参数
如果必须向存储过程传递带类型的参数,则可使用 SQLServerCallableStatement 类的一个 set<Type> 方法通过索引或名称来设置此参数。在下面的实例中,prepareCall 方法用于设置对存储过程的调用,然后在调用 executeQuery 方法之前,使用 setString 方法设置调用的参数。
CallableStatement cstmt = con.prepareCall("{call employee_jobid(?)}");
String lname = "Brown";
cstmt.setString(1, lname);
Resultset rs = cstmt.executeQuery();
rs.close();
cstmt.close();
有关通过存储过程和输入参数来使用 JDBC 驱动程序的详细信息,请参阅使用带有输入参数的存储过程。
从存储过程检索参数
如果必须从存储过程检索参数,则必须首先使用 SQLServerCallableStatement 类的 registerOutParameter 方法通过名称或索引注册一个输出参数,然后在调用存储过程后,将返回的输出参数分配给合适的变量。在下面的实例中,使用 prepareCall 方法设置对存储过程的调用,使用 registerOutParameter 方法设置输出参数,然后在调用 executeQuery 方法前,使用 setString 方法设置调用的参数。使用 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();
有关如何通过存储过程和输出参数来使用 JDBC 驱动程序的详细信息,请参阅使用带有输出参数的存储过程。