sqlserver2005jdbc解决自动增长列统一处理问题纪实
来源:互联网 发布:ubuntu12.04 软件源 编辑:程序博客网 时间:2024/05/18 01:16
背景:系统要支持多种数据库,统一insert的时候获取自动增长列的处理方式
问题1:insert+select方案
sqlserver2000可以使用insertSql +SELECT@@IDENTITYAS'Identity'的方式来获得,但是mysql则只能使用executeUpdate(insertSql);
executeQuery('SELECTlast_insert_id()')这样的方式,否则会抛出异常:java.sql.SQLException:CannotissuedatamanipulationstatementswithexecuteQuery()
而两句话分开处理,总让人感觉不放心,如果并发操作比较多,存在潜在的危险。
问题2:getGeneratedKeys方案
mysql的驱动支持jdbc3.0,实现了getGeneratedKeys(),但sqlserver2000jdbc驱动不支持getGeneratedKeys()
解决思路:
google了一下,据说2005是支持的,所以下下来看看
下载地址:url:http://download.microsoft/download/2/8/9/289dd6a3-eeeb-46dc-9045-d0c6b59bfbc1/sqljdbc_1.1.1501.101_chs.exe
使用小结:
1.2005jdbc驱动是支持jdbc3.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"
如果没注意这点,必将出现异常:Cannotloadjdbcdriverclass'com.microsoft.jdbc.sqlserver.sqlserverDriver'
做好第二步,出现
3.包的位置:环境变量CLASSPATH不是必须的。但sqljdbc.jar必须放置在tomcat/common/lib中(如果是租用空间,可能得跟对方商量了,看是否支持2005的驱动)。
否则会发生异常:Cannotloadjdbcdriverclass'com.microsoft.sqlserver.jdbc.sqlserverDriver'
测试示例方法:
public StringexecuteUpdate(Stringsql)throws SQLException...{
Connectionconn=getConnection();
PreparedStatementpstmt=null;
try...{
/**//*注意:jdbc3.0提供了Statement.RETURN_GENERATED_KEYS"用来指明需要从Statement中获得自动增长列值,
如果不设置该参数,在执行getGeneratedKeys()时会抛出异常:"只有运行该语句,生成的键才会可用。"*/
pstmt=conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
pstmt.executeUpdate();
ResultSetrs= pstmt.getGeneratedKeys();//为了insert准备
if(rs.next())...{
returnrs.getString(1);
}
return"-1";
}catch(SQLExceptionex)...{
thrownewSQLException(
"执行SQL语句失败。"+
ex.toString()+
" sql:"+sql);
}finally...{
freeConnection(conn,pstmt);
}
}
- sqlserver2005jdbc解决自动自动增长列统一处理问题纪实
- sqlserver2005jdbc解决自动增长列统一处理问题纪实
- sql server2005 jdbc解决自动自动增长列统一处理问题纪实
- sql server2005 jdbc解决自动增长列统一处理问题
- Oracle中解决自动增长列的问题
- Excel自动增长列
- SQL自动增长列
- oracle 自动增长列
- oracle 自动增长列
- .gridview自动增长列
- 自定义自动增长列
- sqllite 自动增长列
- oracle 自动增长列
- SQL Server 2012 自动增长列,值跳跃问题
- SQL Server 2012 自动增长列,值跳跃问题
- SQL Server 2012 自动增长列,值跳跃问题
- ORACLE的自动增长列
- datagrid中的自动增长列
- mysql全文搜索索引的字段提高搜索效率
- SQLServer2000数据库中如何重建索引
- 动态网页编程中优化数据库注意的十大原则
- 使你的SQL语句完全优化
- jsp从数据库取得数据作为下拉菜单选项的实现
- sqlserver2005jdbc解决自动增长列统一处理问题纪实
- 运行SQLServer的计算机之间移动数据库
- SQLServer用户自定义的数据库修复
- 无法在SQL2005系统数据库中执行的T-SQL语句(XML处理)
- MySQL关系数据库系统IF查询处理远程拒绝服务漏洞
- SQLServer2005中能够使用Try...Catch语句
- 启动SQLSERVER时自动执行存储过程
- 迅速帮你解决SQLServer日志满问题
- MYSQL出错代码列表