博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
sql server2005 jdbc解决自动增长列统一处理问题
阅读量:7044 次
发布时间:2019-06-28

本文共 1907 字,大约阅读时间需要 6 分钟。

背景:系统要支持多种,统一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方案

的驱动支持jdbc3.0,实现了getGeneratedKeys(),但sqlserver2000 jdbc驱动不支持getGeneratedKeys()

解决思路:

google了一下,据说2005是支持的,所以下下来看看

使用小结:

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);
}

本文转自lzf0530377451CTO博客,原文链接:http://blog.51cto.com/8757576/1565213 ,如需转载请自行联系原作者

你可能感兴趣的文章
关于Wi-Fi安全的探讨
查看>>
除了贡献代码 Amaze UI首次探索国内开源商业模式
查看>>
科达董事长陈冬根获选为苏州科技创业十大人物
查看>>
《云云众声》第109期:中国制造千人会 等你开场!
查看>>
关于5G技术你不得不知的5个问题
查看>>
数据中心何时能摆脱夜夜割,蓝瘦香菇
查看>>
PHP生成随机密码的4种方法及性能对比
查看>>
机器学习技术如何打击网络零售欺诈行为
查看>>
云计算发展惹质疑 安全厂商竞逐“云安全”
查看>>
英特尔Michael Greene:联合Ceph社区和合作伙伴,推动存储性能优化提升
查看>>
一个土豪的智能家居梦想
查看>>
大数据如何给运营做支撑
查看>>
35 个 Java 代码性能优化总结
查看>>
理解Android安全机制
查看>>
从代码构建到性能分析,Java开发人员的首选工具
查看>>
如何防止rogue server破坏数据中心
查看>>
传网络安全提供商FireEye有意收购CyberArk
查看>>
手把手教你打造一个纯CSS图标库
查看>>
硬件辅助超融合:任意云中的全闪存VSAN
查看>>
个人隐私安全该何去何从-大量APP秘密收集追踪个人信息
查看>>