作者fbysss 测试示例方法:
msn:jameslastchina@hotmail.com
blog:blog.csdn.net/fbysss
声明:本文由fbysss原创,转载请注明出处
关键字:自动增长列,jdbc,sqlserver2005
背景:系统要支持多种数据库,统一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 classcom.microsoft.jdbc.sqlserver.SQLServerDriver
做好第二步,出现
3.包的位置:环境变量CLASSPATH不是必须的。但sqljdbc.jar必须放置在tomcat/common/lib中(如果是租用空间,可能得跟对方商量了,看是否支持2005的驱动)。
否则会发生异常:Cannot load JDBC driver classcom.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解决自动自动增长列统一处理问题纪实_数据库技巧
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com 特别注意:本站所有转载文章言论不代表本站观点! 本站所提供的图片等素材,版权归原作者所有,如需使用,请与原作者联系。未经允许不得转载:IDC资讯中心 » sql server2005 jdbc解决自动自动增长列统一处理问题纪实_数据库技巧
相关推荐
-      sql语句中的判断功能的使用方法
-      sql语句中的判断功能的使用方法
-      SQL语言中去掉小数点有效数字后面的所有0
-      ASP连接各种数据库的代码
-      在sql语句中实现md5功能
-      给access数据库减肥
-      asp连接access数据库代码(2)
-      更改 SQL Server 登录模式