2012-10-14 34 views
11
private void insertIntoMyTable (Myclass m) { 
    String query = "INSERT INTO MYTABLE (NAME) VALUES (?)"; 
    jdbcTemplate.update(query, m.getName()); 
} 

在表中插入一条记录,当上面的查询中插入一条记录,在表中自动递增的ID列。我怎样才能获得自动递增的ID,当我通过JdbcTemplate的

有没有办法在插入时得到这个自动递增的ID。因此,在这个例子中我的方法的返回值将是int

+0

我想你可能只是在一个事务中插入后需要一个选择。 – PbxMan

回答

15

检查this reference.您可以使用jdbcTemplate.update为:

编辑 增加进口的要求

import java.sql.Connection; 
import java.sql.PreparedStatement; 
import java.sql.SQLException; 

import org.springframework.jdbc.core.JdbcTemplate; 
import org.springframework.jdbc.core.PreparedStatementCreator; 
import org.springframework.jdbc.support.GeneratedKeyHolder; 
import org.springframework.jdbc.support.KeyHolder; 

以下是代码用法:

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 
+0

这只是在MySql的权利? – PbxMan

+0

我还没有测试过自己,但应该与mysql – Anshu

+0

一起工作,请你把进口? – PbxMan

1

我得到数据库生成的id ASE(MSSQL)像下面插入后,进口:

import org.springframework.jdbc.core.BeanPropertyRowMapper; 
    import org.springframework.jdbc.core.JdbcTemplate; 
    import org.springframework.jdbc.core.RowMapper; 
    import org.springframework.jdbc.core.SqlParameter; 
    import org.springframework.jdbc.core.SqlReturnResultSet; 
    import org.springframework.jdbc.core.simple.SimpleJdbcCall; 

和代码片段:

final String INSERT_SQL = "INSERT INTO [table]\n" 
      + " ([column_1]\n" 
      + " ,[column_2])\n" 
      + " VALUES\n" + 
      " (?, ?)"; 

    Connection connection = jdbcTemplate.getDataSource().getConnection(); 
    PreparedStatement preparedStatement = connection.prepareStatement(INSERT_INVOICE_SQL, Statement.RETURN_GENERATED_KEYS); 
    preparedStatement.setString(1, "test 1"); 
    preparedStatement.setString(2, "test 2"); 

    preparedStatement.executeUpdate(); 
    ResultSet keys = preparedStatement.getGeneratedKeys(); 

    if (keys.next()) { 
     Integer generatedId = keys.getInt(1); //id returned after insert execution 
    }