易截截图软件、单文件、免安装、纯绿色、仅160KB

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

背景:系统要支持多种数据库,统一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()时会抛出异常:"只有运行该语句,生成的


相关文档:

Sql server中时间函数用法详解

SQL中的时间函数非常有用,特别是在我们进行初始赋值、复杂查询的时候,就显得特别方便。
1、获得系统当前时间
select getdate() 
2、DateName ( datepart , date )返回表示指定日期的指定日期部分的字符串。
--今天是2009-2-24--星期二
SELECT DATENAME(year, getdate()) AS 'Year&nbs ......

自增字段的SQL语句解决方案

 create table [表名]
(
[自动编号字段] int IDENTITY (1,1) PRIMARY KEY ,
[字段1] nVarChar(50) default '默认值' null ,
[字段2] ntext null ,
[字段3] datetime,
[字段4] money null ,
[字段5] int default 0,
[字段6] Decimal (12,4) default 0,
[字段7] image null ,
)
删除表:
Drop t ......

怎样使用SQL语句更新行累计列值

 
表:TABLEA
客户编号 应收金额   收款金额 
1001       100        80         
1001       200       180&nb ......

Oracle的SQL*PLUS命令的使用大全

 Oracle的sql*plus是与oracle进行交互的客户端工具。在sql*plus中,可以运行sql*plus命令与sql*plus语句。
  
  我们通常所说的DML、DDL、DCL语句都是sql*plus语句,它们执行完后,都可以保存在一个被称为sql buffer的内存区域中,并且只能保存一条最近执行的sql语句,我们可以对保存在sql buffer中的sql 语句进 ......

SQL 中 where 1=1 和 1=0的 作用

where 1=1有什么用?在SQL语言中,写这么一句话就跟没写一样。
select * from table1 where 1=1与select * from table1完全没有区别,甚至还有其他许多写法,1<>2,'a'='a','a'<>'b',其目的就只有一个,where的条件为永真,得到的结果就是未加约束条件的。
在SQL注入时会用到这个,例如select * from table1 ......
© 2009 ej38.com All Rights Reserved. 关于E健网联系我们 | 站点地图 | 赣ICP备09004571号