共用方式為


使用基本資料類型

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 驅動程式目前不支援 SQL Server sqlvariant 資料類型。如果使用查詢以擷取資料表 (包含 sqlvariant 資料類型的資料行) 的資料,會發生例外狀況。

下列章節會提供如何使用 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();

注意

getUnicodeStream 與具有 scale 方法的 getBigDecimal 都已被取代,並且 JDBC 驅動程式並不支援。

依資料類型更新資料

如果您必須更新資料來源中的欄位值,您應該使用 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();

注意

JDBC 驅動程式無法更新資料行名稱長度超過 127 個字元的 SQL Server 資料行。如果嘗試更新名稱超過 127 個字元的資料行,將會發生例外狀況。

依參數化查詢更新資料

如果您必須使用參數化查詢更新資料來源中的資料,您可使用 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 方法,依據名稱或索引註冊 out 參數,然後在執行預存程序的呼叫之後,將傳回的 out 參數指定給適當的變數。在下列範例中,prepareCall 方法用來設定預存程序的呼叫,而 registerOutParameter 方法則用來設定 out 參數,然後在呼叫 executeQuery 方法之前,使用 setString 方法設定呼叫的參數。由預存程序的 out 參數所傳回的值,可使用 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();

注意

除了傳回的 out 參數之外,結果集也會傳回執行預存程序的結果。

如需如何使用 JDBC 驅動程式與預存程序和輸出參數搭配的詳細資訊,請參閱<使用含有輸出參數的預存程序>。

另請參閱

其他資源

瞭解 JDBC Driver 資料類型