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

首頁 > 開發 > 綜合 > 正文

SQL jdbc解決自動自動增長列統一處理問題紀實

2024-07-21 02:14:30
字體:
來源:轉載
供稿:網友

sql server2005 jdbc解決自動自動增長列統一處理問題紀實

作者fbysss
msn:[email protected] 
blog:blog.csdn.net/fbysss
聲明:本文由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);
        }
    }

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 神农架林区| 洛隆县| 贵溪市| 吴旗县| 凉城县| 花莲市| 翁牛特旗| 旺苍县| 和林格尔县| 东至县| 府谷县| 井研县| 新和县| 萨嘎县| 岳普湖县| 桓仁| 英超| 长泰县| 临洮县| 图木舒克市| 丹凤县| 浏阳市| 治多县| 平邑县| 通城县| 安吉县| 乌鲁木齐县| 永胜县| 高尔夫| 旬邑县| 灵寿县| 嘉禾县| 江达县| 临沭县| 德江县| 拜泉县| 左权县| 宁南县| 鸡西市| 沅江市| 普兰县|