2010-02-12 43 views
2

我試圖在我的數據庫中插入一些數據後獲取插入ID。RETURN_GENERATED_KEYS無法使用JDBC ODBC

String sql = "INSERT INTO ADI.DUMMY(dummy_data) VALUES('from database logger')"; 
PreparedStatement ps = con.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS); 
int extUptReturn = ps.executeUpdate(sql); 

但我得到這個異常:

Java exception: ''java.lang.UnsupportedOperationException''; 
    thrown from class name: ''sun.jdbc.odbc.JdbcOdbcConnection'', method name: ''prepareStatement'', file: ''JdbcOdbcConnection.java'', line: '1762' 

回答

7

ODBC橋驅動程序不支持它。沒有什麼可以反對的。要麼更換驅動程序,要麼與它同住。我只想使用真實的 JDBC驅動程序,而不是缺乏開發能力,缺少功能的錯誤豐富的Sun ODBC橋驅動程序。幾乎所有自我推薦的基於服務器的RDBMS供應商都會在其主頁上提供可供下載的完整JDBC驅動程序。只需Google「[vendorname] jdbc驅動程序下載」即可找到它。下面是一個概述:

+1

-1不必要的訪問撲。沒有驅動程序的原因不是因爲它不是RDBMS,而是因爲它不是服務器數據庫引擎,所以不應該在JDBC正在使用的上下文中用作數據存儲。當然,我是認爲Java在客戶端上沒有任何位置的人之一...... – 2010-04-04 00:05:09

+0

@David:我沒有使用Access,我使用了JDBC-ODBC橋驅動程序。 – BalusC 2010-04-04 04:14:29

+1

你說Access「不是完整的RDBMS」。這是對訪問,期限,聲明的結束,沒有任何含糊之處,只有在RDMBS有錯誤定義的情況下才是真實的。通過包含它來減少答案的質量。你可以刪除那個短語,它不會改變你給一個iota的建議。 – 2010-04-04 19:28:42

0

可能是JDBC的實現不能支持sepcific調度研究。 CHeck使用的JDBC驅動程序。

0

試試這個例子,而不是Statement.RETURN_GENERATED_KEYS

String[] returnId = { "BATCHID" }; 
String sql = "INSERT INTO BATCH (BATCHNAME) VALUES ('aaaaaaa')"; 
PreparedStatement statement = connection 
     .prepareStatement(sql, returnId); 
int affectedRows = statement.executeUpdate(); 

if (affectedRows == 0) { 
    throw new SQLException("Creating user failed, no rows affected."); 
} 

try (ResultSet rs = statement.getGeneratedKeys()) { 
    if (rs.next()) { 
     System.out.println(rs.getInt(1)); 
    } 
    rs.close(); 

} 

哪裏BRANCHID是自動生成的ID