


sql server2005 jdbc解決自動增長列
背景:系統要支持多種數據庫,統一insert的時候獲取自動增長列的處理方式
問題1:insert+select方案
sqlserver2000可以使用insertSql + SELECT @@IDENTITY AS 'Identity'的方式來獲得,但是mysql則只能使用executeUpdate(insertSql);
executeQuery('SELECT last_insert_id() ')這樣的方式,否則會拋出異常:java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
而兩句話分開處理,總讓人感覺不放心,如果并發操作比較多,存在潛在的危險。
問題2:getGeneratedKeys方案
mysql的驅動支持jdbc3.0,實現了getGeneratedKeys(),但sqlserver2000 jdbc驅動不支持getGeneratedKeys()
解決思路:
google了一下,據說2005是支持的,所以下下來看看
下載地址:url:http://download.microsoft.com/download/2/8/9/289dd6a3-eeeb-46dc-9045-d0c6b59bfbc1/sqljdbc_1.1.1501.101_chs.exe
使用小結:
1.2005jdbc驅動是支持jdbc 3.0 的。也就是說,的確支持getGeneratedKeys()方法。
2.2005jdbc驅動url和包組織變動較大。
舉例對比:
================
2000
================
url="jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=mydb;SelectMethod=cursor"
driverClassName="com.microsoft.sqlserver.jdbc.SQLServerDriver"
================
2005
================
url="jdbc:sqlserver://localhost:1433;DatabaseName=mydb;SelectMethod=cursor"
driverClassName="com.microsoft.jdbc.sqlserver.SQLServerDriver"
如果沒注意這點,必將出現異常:Cannot load JDBC driver class'com.microsoft.jdbc.sqlserver.SQLServerDriver'
做好第二步,出現
3.包的位置:環境變量CLASSPATH不是必須的。但sqljdbc.jar必須放置在tomcat/common/lib中(如果是租用空間,可能得跟對方商量了,看是否支持2005的驅動)。
否則會發生異常:Cannot load JDBC driver class'com.microsoft.sqlserver.jdbc.SQLServerDriver'
測試示例方法:
public String executeUpdate(String sql) throws SQLException ...{
Connection conn = getConnection();
PreparedStatement pstmt = null;
try ...{
/**//*注意:jdbc3.0提供了Statement.RETURN_GENERATED_KEYS"用來指明需要從Statement中獲得自動增長列值,
如果不設置該參數,在執行getGeneratedKeys()時會拋出異常:"只有運行該語句,生成的鍵才會可用。"*/
pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
pstmt.executeUpdate();
ResultSet rs = pstmt.getGeneratedKeys();//為了insert準備
if (rs.next())...{
return rs.getString(1);
}
return "-1";
} catch (SQLException ex) ...{
throw new SQLException(
"執行SQL語句失敗。" +
ex.toString() +
" sql:"+sql);
} finally ...{
freeConnection(conn,pstmt);
}
}
關鍵字:sql server2005、jdbc、數據庫
新文章:
- CentOS7下圖形配置網絡的方法
- CentOS 7如何添加刪除用戶
- 如何解決centos7雙系統后丟失windows啟動項
- CentOS單網卡如何批量添加不同IP段
- CentOS下iconv命令的介紹
- Centos7 SSH密鑰登陸及密碼密鑰雙重驗證詳解
- CentOS 7.1添加刪除用戶的方法
- CentOS查找/掃描局域網打印機IP講解
- CentOS7使用hostapd實現無AP模式的詳解
- su命令不能切換root的解決方法
- 解決VMware下CentOS7網絡重啟出錯
- 解決Centos7雙系統后丟失windows啟動項
- CentOS下如何避免文件覆蓋
- CentOS7和CentOS6系統有什么不同呢
- Centos 6.6默認iptable規則詳解