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

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

sql server2005 jdbc解決自動(dòng)增長列統(tǒng)一處理問題

2024-08-31 00:53:11
字體:
供稿:網(wǎng)友
背景:系統(tǒng)要支持多種數(shù)據(jù)庫,統(tǒng)一insert的時(shí)候獲取自動(dòng)增長列的處理方式

問題1:insert select方案

sqlserver2000能夠使用insertSql SELECT @@IDENTITY AS 'Identity'的方式來獲得,但是MySQL則只能使用executeUpdate(insertSql);

executeQuery('SELECT last_insert_id() ')這樣的方式,否則會(huì)拋出異常:java.sql.SQLException: Can not issue data manipulation statements with executeQuery()

而兩句話分開處理,總讓人感覺不放心,假如并發(fā)操作比較多,存在潛在的危險(xiǎn)。

問題2:getGeneratedKeys方案

mysql的驅(qū)動(dòng)支持jdbc3.0,實(shí)現(xiàn)了getGeneratedKeys(),但sqlserver2000 jdbc驅(qū)動(dòng)不支持getGeneratedKeys()

解決思路:

google了一下,據(jù)說2005是支持的,所以下下來看看

下載地址: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 的。也就是說,的確支持getGeneratedKeys()方法。

2.2005jdbc驅(qū)動(dòng)url和包組織變動(dòng)較大。

舉例對比:

================
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"
假如沒注意這點(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中(假如是租用空間,可能得跟對方商量了,看是否支持2005的驅(qū)動(dòng))。

否則會(huì)發(fā)生異常: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中獲得自動(dòng)增長列值,
假如不配置該參數(shù),在執(zhí)行g(shù)etGeneratedKeys()時(shí)會(huì)拋出異常:"只有運(yùn)行該語句,生成的鍵才會(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語句失敗。"
ex.toString()
" sql:" sql);


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

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 永顺县| 天津市| 汶上县| 自治县| 汪清县| 松江区| 灵武市| 利辛县| 丹巴县| 雷波县| 河池市| 怀集县| 确山县| 潞城市| 通渭县| 白沙| 剑阁县| 雷州市| 兴城市| 临洮县| 稷山县| 电白县| 百色市| 奎屯市| 五原县| 汶上县| 梁平县| 札达县| 巴林左旗| 蛟河市| 抚顺市| 彭泽县| 马边| 琼海市| 马公市| 美姑县| 车险| 宁安市| 德格县| 山东省| 新安县|