本人からのsqlのinsertよjdbctemplate
-
13-09-2019 - |
質問
可能で、@@本人からのSQLを挿入し、春jdbcテンプレート電話のかけ方は?どうすれば良いですか。
解決
JDBCTemplate.update
方法は、あなたが自動生成キーを取得するために使用することができますGeneratedKeyHolderと呼ばれるオブジェクトを取るようにオーバーロードされます。例えば、(コードでは、ここでから撮影しますの):
final String INSERT_SQL = "insert into my_test (name) values(?)";
final String name = "Rob";
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(
new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
PreparedStatement ps =
connection.prepareStatement(INSERT_SQL, new String[] {"id"});
ps.setString(1, name);
return ps;
}
},
keyHolder);
// keyHolder.getKey() now contains the generated key
他のヒント
かつ SimpleJdbcInsert.executeAndReturnKey
?この形態によっては入力:
(1)入力は、 Map
public java.lang.Number executeAndReturnKey(java.util.Map<java.lang.String,?> args)
Descriptionインタフェースからコピーされた:
SimpleJdbcInsertOperations
実行を挿入した値を用され、生成されます。この名前のカラムの自動生成キーをして指定します。このメソッドは常に戻る
KeyHolder
その呼び出し側になることを確認で実際に発生する鍵となります。指定した:
executeAndReturnKey
インターフェイスSimpleJdbcInsertOperations
パラメータ:
args - Map containing column names and corresponding value
戻り値:
the generated key value
(2)入力は、 SqlParameterSource
public java.lang.Number executeAndReturnKey(
SqlParameterSource
parameterSource)
Descriptionインタフェースからコピーされた:
SimpleJdbcInsertOperations
実行を挿入した値を用され、生成されます。この名前のカラムの自動生成キーをして指定します。このメソッドは常に戻る
KeyHolder
その呼び出し側になることを確認で実際に発生する鍵となります。指定した:
executeAndReturnKey
インターフェイスSimpleJdbcInsertOperations
パラメータ:
parameterSource - SqlParameterSource containing values to use for insert
戻り値:
生成されたキーの値です。
todd.pierzina答えに詳細なメモ/サンプルコードを追加する
jdbcInsert = new SimpleJdbcInsert(jdbcTemplate);
jdbcInsert.withTableName("TABLE_NAME").usingGeneratedKeyColumns(
"Primary_key");
Map<String, Object> parameters = new HashMap<>();
parameters.put("Column_NAME1", bean.getval1());
parameters.put("Column_NAME2", bean.getval2());
// execute insert
Number key = jdbcInsert.executeAndReturnKey(new MapSqlParameterSource(
parameters));
// convert Number to Int using ((Number) key).intValue()
return ((Number) key).intValue();
「ワンライナー」がある場合、私は知らないが、これは(MSSQLのために少なくとも)トリックを行うようだ。
// -- call this after the insert query...
this._jdbcTemplate.queryForInt( "select @@identity" );
まともな記事ここを。