欢迎您访问我爱IT技术网,今天小编为你分享的编程技术是:【sql server2005 jdbc解决自动增长列统一处理问题纪实】,下面是详细的分享!
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 ...{
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解决自动增长列统一处理问题纪实,下面是编辑为你推荐的有价值的用户互动:
相关问题:(转)java中如何通过JDBC的方式连接sqlserver2005多...
答:今天用java连接sqlserver 2005的多实例时,发现总是报错"error while performing database login with the xxx driver,";在网上找到一篇文章,如下:java语言中,通过jdbc访问sqlserver2005数据库默认实例可以按正常的写法来建立url连接,代码如下... >>详细
相关问题:JDBC连接SQL Server2005总报错找不到SQLServerDriver
答:第一步,把自己的sqljdbc.jar放入"TOMCAT_HOME"\webapps\“项目名”\WEB-INF\lib下面 这一步,你看看是否正确。你的表达好像可以了。但是,你要看清楚路径。 第二步, WEB-INF\lib中已经放了sqljdbc.jar包加入到项目的java build里面(构建路径) 这... >>详细
相关问题:jdbc 连接sqlserver 2005 问题
答:这个提示应该很明确 了吧。 你用的是sqlserver 2005,用的是 sqljdbc.jar 而你的jdk的版本是1.7,与数据库的驱动的版本不兼容。 解决: 1、sqljdbc.jar 升级,升级到与jdk1.7 兼容的版本 2、把jdk1.7降到1.6 >>详细
- 评论列表(网友评论仅供网友表达个人看法,并不表明本站同意其观点或证实其描述)
-
