程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> SqlServer數據庫 >> 關於SqlServer >> sql server2005 jdbc解決自動增長列統一處理問題紀實

sql server2005 jdbc解決自動增長列統一處理問題紀實

編輯:關於SqlServer

背景:系統要支持多種數據庫,統一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'

做好第二步,出現

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved