背景:系统要支持多种数据库,统一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'
做好第二步,出现