国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 數(shù)據(jù)庫(kù) > SQL Server > 正文

sql server2005 jdbc解決自動(dòng)自動(dòng)增長(zhǎng)列統(tǒng)一處理問(wèn)題紀(jì)實(shí)

2024-08-31 00:51:39
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友

作者fbysss
msn:jameslastchina@hotmail.com 
blog:blog.csdn.net/fbysss
聲明:本文由fbysss原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處
關(guān)鍵字:自動(dòng)增長(zhǎng)列,jdbc,sqlserver2005


背景:系統(tǒng)要支持多種數(shù)據(jù)庫(kù),統(tǒng)一insert的時(shí)候獲取自動(dòng)增長(zhǎng)列的處理方式
問(wèn)題1:insert+select方案
sqlserver2000可以使用insertSql  + SELECT @@IDENTITY AS 'Identity'的方式來(lái)獲得,
但是MySQL則只能使用executeUpdate(insertSql); executeQuery('SELECT last_insert_id() ')這樣的方式,否則會(huì)拋出異常:java.sql.SQLException: Can not issue data manipulation statements with executeQuery()
而兩句話(huà)分開(kāi)處理,總讓人感覺(jué)不放心,如果并發(fā)操作比較多,存在潛在的危險(xiǎn)
問(wèn)題2:getGeneratedKeys方案
mysql的驅(qū)動(dòng)支持jdbc3.0,實(shí)現(xiàn)了getGeneratedKeys()
但sqlserver2000 jdbc驅(qū)動(dòng)不支持getGeneratedKeys()
解決思路:
google了一下,據(jù)說(shuō)2005是支持的,所以下下來(lái)看看
下載地址:url:http://download.microsoft.com/download/2/8/9/289dd6a3-eeeb-46dc-9045-d0c6b59bfbc1/sqljdbc_1.1.1501.101_chs.exe
使用小結(jié):
1.2005jdbc驅(qū)動(dòng)是支持jdbc 3.0 的。也就是說(shuō),的確支持getGeneratedKeys()方法。
2.2005jdbc驅(qū)動(dòng)url和包組織變動(dòng)較大。
舉例對(duì)比:(請(qǐng)仔細(xì)看好了,一不小心看不出差別!)
================
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"
如果沒(méi)注意這點(diǎn),必將出現(xiàn)異常:Cannot load JDBC driver class'com.microsoft.jdbc.sqlserver.SQLServerDriver'
做好第二步,出現(xiàn)
3.包的位置:環(huán)境變量CLASSPATH不是必須的。但sqljdbc.jar必須放置在tomcat/common/lib中(如果是租用空間,可能得跟對(duì)方商量了,看是否支持2005的驅(qū)動(dòng))。
否則會(huì)發(fā)生異常:Cannot load JDBC driver class'com.microsoft.sqlserver.jdbc.SQLServerDriver'

測(cè)試示例方法:


    public  String executeUpdate(String sql) throws    SQLException ...{
        Connection conn = getConnection();
        PReparedStatement pstmt = null;
        try ...{
            /**//*注意:jdbc3.0提供了Statement.RETURN_GENERATED_KEYS"用來(lái)指明需要從Statement中獲得自動(dòng)增長(zhǎng)列值,
            如果不設(shè)置該參數(shù),在執(zhí)行g(shù)etGeneratedKeys()時(shí)會(huì)拋出異常:"只有運(yùn)行該語(yǔ)句,生成的鍵才會(huì)可用。"*/
            pstmt = conn.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
            pstmt.executeUpdate();
            ResultSet rs =  pstmt.getGeneratedKeys();//為了insert準(zhǔn)備
            if (rs.next())...{
             return rs.getString(1);
            }
            return "-1";
        } catch (SQLException ex) ...{
                throw new SQLException(
                                          "執(zhí)行SQL語(yǔ)句失敗。" +
                                          ex.toString() +
                                          "  sql:"+sql);


        } finally ...{
            freeConnection(conn,pstmt);
        }
    }  

 


發(fā)表評(píng)論 共有條評(píng)論
用戶(hù)名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 疏附县| 公主岭市| 博乐市| 都江堰市| 天峨县| 五原县| 南昌县| 喀什市| 五寨县| 新郑市| 方正县| 江陵县| 民勤县| 淮安市| 万源市| 顺义区| 天台县| 孝昌县| 邓州市| 铅山县| 湟中县| 台南县| 天全县| 平武县| 娱乐| 许昌县| 保靖县| 通辽市| 安仁县| 徐闻县| 尉犁县| 海兴县| 抚松县| 米泉市| 乌鲁木齐市| 浦县| 普定县| 宁陕县| 临清市| 南和县| 重庆市|