この質問で述べた方法を使用して、PHPmysql_insert_id()
関数やMySQL関数のようなJSPで最後に生成された自動インクリメントIDを取得しようとしています(ただし、Oracle 10gを使用しています)。last_insert_id()
getGeneratedKeys()
TRANSPORTER
Oracleデータベースに、Javaの型にマップされたtypeという名前TRANSPORTER_ID
の列があり、シーケンスで生成された主キーであるテーブルがあります。NUMBER(35, 0)
BigDecimal
Connection con;
ResultSet rs;
PreparedStatement ps;
String url = "jdbc:oracle:thin:@localhost:1521:xe";
String user = "root";
String pwd = "root";
Class.forName("oracle.jdbc.OracleDriver").newInstance();
con = DriverManager.getConnection(url, user, pwd);
ps = con.prepareStatement("INSERT INTO transporter(transporter_name, transporter_website)VALUES(?, ?)");
ps.setString(1, "New");
ps.setString(2, "New Website");
ps.executeUpdate();
BigDecimal id = new BigDecimal(0);
rs = ps.getGeneratedKeys();
while (rs.next()) {
id = rs.getBigDecimal("transporter_id");
}
out.println("The generated id is : " + id);
rs = ps.getGeneratedKeys();
挿入操作が実行された後、コードは前のwhile
ループの上でこのメソッドを呼び出そうとしますが、次の例外で失敗します。
javax.servlet.ServletException:java.sql.SQLException:操作は許可されていません
私はで試しましたが、Oracle JDBC Driver version - 10.2.0.5.0
失敗したときは、より高いバージョンをダウンロードしました11.2.0.3.0
が、役に立ちませんでした。理由は何でしょうか?