JDBC INSERT文自動生成のプライマリ・キーの取得
JDBC INSERT文自動生成のプライマリ・キーの取得
MySQLの背景の下で、JDBCを通じて
1つ目の方法は、先ほど追加したデータを
2つ目の方法は、
プライマリ・キーは一意かつ自己増加であるため、プライマリ・キーの値が最大となるのは、先ほど挿入するデータのプライマリ・キーである.
3つ目の方法は、JDBCを使用して提供される方法です.
このパラメータは、
例:
4つ目の方法は、MySQLが提供する関数を使用することです.
しかし、
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()
が変更されます.