设为首页 收藏本站
查看: 1148|回复: 0

[经验分享] sql server2005 jdbc解决自动增长列统一处理问题

[复制链接]

尚未签到

发表于 2018-10-23 13:53:40 | 显示全部楼层 |阅读模式
  背景:系统要支持多种数据库,统一insert的时候获取自动增长列的处理方式
  问题1:insert select方案

  sqlserver2000能够使用insertSql SELECT @@IDENTITY AS>  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是支持的,所以下下来看看
  使用小结:
  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>  做好第二步,出现
  3.包的位置:环境变量CLASSPATH不是必须的。但sqljdbc.jar必须放置在tomcat/common/lib中(假如是租用空间,可能得跟对方商量了,看是否支持2005的驱动)。

  否则会发生异常:Cannot load JDBC driver>  测试示例方法:
  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);
  }


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-625539-1-1.html 上篇帖子: SQL Server数据库附加之后只读或是失败的破解 下篇帖子: 防SQL注入脚本
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表