|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
Java编译的是字节码,跟C++相反,启动不够快,效率不够高,难以精确控制内存,但是优点是编程比C++容易,代码比较安全但是容易留下性能隐患,跨平台靠字节码在各个平台复制(一处编译到处调试)sql|办理|成绩sqlserver2005jdbc办理主动主动增加列一致处置成绩纪实
作者fbysss
msn:jameslastchina@hotmail.com
blog:blog.csdn.net/fbysss
声明:本文由fbysss原创,转载请说明出处
关头字:主动增加列,jdbc,sqlserver2005
背景:体系要撑持多种数据库,一致insert的时分猎取主动增加列的处置体例
成绩1:insert+select计划
sqlserver2000可使用insertSql+SELECT@@IDENTITYASIdentity的体例来取得,
可是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.com/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"
假如没注重这点,势必呈现非常:CannotloadJDBCdriverclasscom.microsoft.jdbc.sqlserver.SQLServerDriver
做好第二步,呈现
3.包的地位:情况变量CLASSPATH不是必需的。但sqljdbc.jar必需安排在tomcat/common/lib中(假如是租用空间,大概得跟对方商议了,看是不是撑持2005的驱动)。
不然会产生非常:CannotloadJDBCdriverclasscom.microsoft.sqlserver.jdbc.SQLServerDriver
测试示例办法:
publicStringexecuteUpdate(Stringsql)throwsSQLException...{
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);
}
}
自己的整个学习思路完全被老师的讲课思路所牵制,这样几节课听下来,恐怕自己的见解都应该是书里的知识点了,根本谈不上自身发现问题,分析问题,和解决问题能力的切实提高。 |
|