首页 > 数据库 >sql server2005 jdbc解决自动自动增长列统一处理问题纪实

sql server2005 jdbc解决自动自动增长列统一处理问题纪实

时间:2023-09-04 16:05:36浏览次数:55  
标签:jdbc getGeneratedKeys sqlserver server2005 自动 sql microsoft pstmt


作者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 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 ...{
            /**//*注意: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解决自动自动增长列统一处理问题纪实_insert

标签:jdbc,getGeneratedKeys,sqlserver,server2005,自动,sql,microsoft,pstmt
From: https://blog.51cto.com/u_16245757/7351685

相关文章

  • 软件测试 | Web自动化测试
    当前绝大多数企业应用系统都是基于Web的应用系统,人们可以通过Internet浏览器便捷地访问它们。在可以预见地将来,“云计算”会进一步推动这种趋势。当前很多组织和公司,采用持续改进的开发模式来应对这种趋势。在持续改进开发模式中(例如敏捷和极限开发模式),需要不断地进行迭代测试。传......
  • 文本框自动求和
    <headrunat="server"><title>无标题页</title><scriptlanguage="javascript"type="text/javascript">functiontot(){varaa=document.getElementById("Text1")varbb=document.getElementById("Text2......
  • python 自动化办公第三方库
    尽我所能地整理了一份资料,分享给大家。  一、中文版:自动化办公的文档  1、综合  ①python-office  Python-office是一个Python自动化办公第三方库,能解决大部分自动化办公的问题。而且每个功能只需一行代码,不需要小白用户学习Python知识,做到了真......
  • 彻底关闭谷歌浏览器自动更新方法分享 取消chrome自动更新
    不想让Chrome浏览器自动更新主要是因为70版本后的Ui无法更改,强迫症的我实在无法忍受。看了网上的很多方法都不管用,后来找到这个方法测试成功后真的太开心了。现在分享给大家,希望给需要的人一点帮助吧。我们做法是:清空Update文件夹,并设置权限,让chrome没有权限改这个文件夹。原理:......
  • 洛谷P3808 【模板】AC 自动机(简单版)题解 AC自动机模板题
    题目链接:https://www.luogu.com.cn/problem/P3808AC自动机模板题。示例程序:#include<bits/stdc++.h>usingnamespacestd;constintmaxn=1e6+5;structNode{intson[26],fail,id;Node(){}Node(int_id){memset(son,0,sizeof(son));......
  • 实现python自动化进行薪资核算——数据读取、数据计算、数据输出
    前言上一篇文章我们完成了相关准备工作——pandas库的安装以及相关库问题的解决,这篇文章实现简单的薪资核算工作。功能要求当前表格中,考勤扣除金额、个税扣除、实发工资目前是空缺的,最终生成的数据需要将上述三列的数据分别根据以下规则填充。1、迟到次数核算方法:3次以内不扣除3次......
  • 使用自动模型
    本文通过文本分类任务演示了HuggingFace自动模型使用方法,既不需要手动计算loss,也不需要手动定义下游任务模型,通过阅读自动模型实现源码,提高NLP建模能力。一.任务和数据集介绍1.任务介绍前面章节通过手动方式定义下游任务模型,HuggingFace也提供了一些常见的预定义下游任务模型,如......
  • springboot自动配置的原理和如何自定义starter
    一、springboot自动配置的原理使用springboot时的一大优点就是当需要引入一些第三方的框架时只需要引入一个对应的starter后springboot就会自动的完成配置,例如在springboot中使用mybatis只需要引入mybatis提供的starter.那么这种便捷的配置方式是如何实现的呢,要了解其中的原理......
  • jenkins集成全自动化部署
    1.jenkins集成全自动化部署自动化触发BuildNow自动化在另一台服务上部署自动化启动和停止继上一篇Jenkins集成我们已经完成了手动触发BuildNow,即手动部署服务器,且还需要手动启动那么在实际开发中,这些步骤都是繁琐的,作为测试人员,这简直就是不必要的动作那么,在此咱们实现全......
  • python办公自动化(6)——读取word文档
     #使用import导入os模块importos#将乔老师的答题卡文件夹路径/Users/qiao/answerKey赋值给变量allKeyPathallKeyPath="/Users/qiao/answerKey"#使用os.listdir()函数获取该路径下所有的文件,并赋值给变量allItemsallItems=os.listdir(allKeyPath)#定义一个......