この方法で行われたこの質問に対するこの答えは、インターネット上で見つけるのが非常に難しいようです。基本的に、PreparedStatementを使用してMySQLデータベースに値を挿入しています。 PreparedStatementを使用してデータをエスケープし、SQLインジェクション攻撃を防ぎます。問題は、これらのキーを取得する方法があることです。
String query="Insert INTO Table_A(name, age) (?, ?)";
//String query="Insert INTO Table_A(name, age) ('abc','123' )";//Doesn't escape
PreparedStatement prest;
prest = con.prepareStatement(query);
prest.setString(1,"abc");
prest.setInt(2,123);
prest.executeUpdate();
//prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error
//prest.executeQuery(); Throws an error
それでは、入力をエスケープしてJavaでPreparedStatementsを使用するにはどうすればよいですか?
クエリとともにprepareStatement()
に_Statement.RETURN_GENERATED_KEYS
_を渡します。次に、PreparedStatement
のgetGeneratedKeys()を使用して、挿入されたauto_incremented_idを含むResultSetを取得します。
_String query="Insert INTO Table_A(name, age) (?, ?)";
//String query="Insert INTO Table_A(name, age) ('abc','123' )";//Doesn't escape
PreparedStatement prest;
prest = con.prepareStatement(query, Statement.RETURN_GENERATED_KEYS);
prest.setString(1,"abc");
prest.setInt(2,123);
prest.executeUpdate();
//prest.executeUpdate(query, PreparedStatement.RETURN_GENERATED_KEYS); Throws an error
//prest.executeQuery(); Throws an error
ResultSet rs = prest.getGeneratedKeys();
if(rs.next())
{
int last_inserted_id = rs.getInt(1);
}
_
Java.sql.ResultSet Java.sql.Statement.getGeneratedKeys() を使用して、生成されたキーを取得します。
RETURN_GENERATED_KEYS
を使用できない場合は、別のステートメント(今回はクエリ)を使用して実行してください
SELECT last_insert_id()
そのテーブルに自動インクリメントの主キー列があることを確認してください。