JDBC INSERT文自動生成のプライマリ・キーの取得

4455 ワード

JDBC INSERT文自動生成のプライマリ・キーの取得
MySQLの背景の下で、JDBCを通じてINSERT文を使って1本のデータを追加した後に、どのようにさっきのこのデータの主なキーを返して、このテーブルが1つの主なキーだけあることを知っていて(しかも自増)、その他のフィールドはすべて唯一のフィールドではありません.
1つ目の方法は、先ほど追加したデータをSELECT文で検索することですが、テーブルにまったく同じフィールドがあると完成しません.結局、私たちのテーブルにはプライマリ・キーしかありません.また、追加した後、すぐに修正された人がいたら、それも取得できません.そのため、この方法は全く実行できません.
2つ目の方法は、max(id)によって取得される.
select max(id) from user;

プライマリ・キーは一意かつ自己増加であるため、プライマリ・キーの値が最大となるのは、先ほど挿入するデータのプライマリ・キーである.
3つ目の方法は、JDBCを使用して提供される方法です.ConnectionによりStatementオブジェクトを取得すると、Statement.RETURN_GENERATED_KEYSパラメータが提供される
PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);

このパラメータは、INSERT文が実行された後、getGeneratedKeys()を使用して自動的に生成されたフィールドの値を取得できることを示します(AUTO_INCREMENTである必要があります).getGeneratedKeys()メソッドは、ResultSetオブジェクトを返します.最初のデータは自動的に生成された値です.
例:
Connection conn = DriverManager.getConnection(url,user,password);
String sql = "insert into user (name,password) values ('123','123')";
//     :          
PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
//       
ps.executeUpdate();
//         (  sql insert  ,             )
ResultSet rs = ps.getGeneratedKeys();
if (rs.next()) {
	System.out.println(rs.getInt(1));
}

4つ目の方法は、MySQLが提供する関数を使用することです.INSERT文の実行後、last_insert_id()メソッドの実行
select last_insert_id();

しかし、last_insert_id()の方法はtableとは関係なく、aテーブルにデータを挿入し、bテーブルにデータを挿入すると、last_insert_id()が変更されます.