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

首頁 > 數據庫 > SQL Server > 正文

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

2024-08-31 00:49:48
字體:
來源:轉載
供稿:網友

背景:系統要支持多種數據庫,統一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);
        }
    }  


發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 隆化县| 格尔木市| 岳阳县| 应城市| 柘城县| 城固县| 民权县| 扎鲁特旗| 达日县| 衡水市| 定兴县| 田林县| 定结县| 望城县| 和林格尔县| 永春县| 敦化市| 黄骅市| 建阳市| 自贡市| 阳泉市| 宜都市| 乐都县| 招远市| 乐安县| 凭祥市| 安岳县| 贡山| 赞皇县| 务川| 巴青县| 永丰县| 湖南省| 阿拉善左旗| 司法| 济南市| 滁州市| 怀远县| 栾川县| 东兰县| 滁州市|