1. 程式人生 > >JdbcTemplate下訪問Oracle資料庫插入資料時返回序列增長的主鍵

JdbcTemplate下訪問Oracle資料庫插入資料時返回序列增長的主鍵

使用JdbcTemplate取得插入Oracle記錄的主鍵值 在使用spring的過程中經常遇到獲取插入資料的主鍵值,在使用jdbc時我們可能已經會使用了,但是在spring的jdbcTemplate中也有相關的方法: 

第一種方法: 

public int getKey1(User user){ 

int i = 0; 

final String name = user.getUserName(); 

final String password = user.getPassword(); 

final int age = user.getAge(); 

KeyHolder keyHolder = new GeneratedKeyHolder(); 

final String sql = "insert into tb_user(user_name,password,age) values(?,?,?)"; 

jdbcTemplate.update(new PreparedStatementCreator(){ 



public PreparedStatement createPreparedStatement(Connection conn) 

throws SQLException { 

PreparedStatement ps = conn.prepareStatement(sql,new String[]{"user_id"}); 

ps.setString(1, name); 

ps.setString(2, password); 

ps.setInt(3, age); 

return ps; 



}, keyHolder); 

i = keyHolder.getKey().intValue(); 

return i; 





第二種方法: 


public int getKey2(User user){ 

//這裡withTableName("tb_user")面是 表名,usingGeneratedKeyColumns("user_id")表字段主鍵 

SimpleJdbcInsert insertActor =  new SimpleJdbcInsert(jdbcTemplate.getDataSource()).withTableName("tb_user").usingGeneratedKeyColumns("user_id");

Map<String, Object> parameters = new HashMap<String, Object>();  

        parameters.put("user_name", user.getUserName()); 

        parameters.put("password", user.getPassword()); 

        parameters.put("age", user.getAge()); 

        Number newId = insertActor.executeAndReturnKey(parameters); 

return newId.intValue(); 





Java程式碼 複製程式碼 收藏程式碼
  1. import java.sql.Connection;  
  2. import java.sql.PreparedStatement;  
  3. import java.sql.SQLException;  
  4. import java.text.ParseException;  
  5. import org.springframework.jdbc.core.PreparedStatementCreator;  
  6. import org.springframework.jdbc.support.GeneratedKeyHolder;  
  7. import org.springframework.jdbc.support.KeyHolder;  
  8. import com.kjlink.cms.form.model.LabelForm;  
  9. import com.kjlink.cms.service.BaseService;  
  10. publicclass ff extends BaseService {  
  11. publicint insertTable(LabelForm f) throws SQLException,ParseException   
  12. {  
  13. String content = f.getSiteId();  
  14. final String sql = "insert into TAG_INFO(SITE_ID,NAME,CONTENT) values(?,?,'"
    +content+"')";  
  15. KeyHolder keyHolder = new GeneratedKeyHolder();  
  16. getJdbcTemplate().update(  
  17.    new PreparedStatementCreator() {  
  18.     public PreparedStatement createPreparedStatement(Connection con) throws SQLException   
  19.     {  
  20.      PreparedStatement ps = getJdbcTemplate().getDataSource()  
  21.        .getConnection().prepareStatement(sql,new String[]{ "SITE_ID" ,"NAME"});  
  22.      ps.setString(1"站點號");  
  23.      ps.setString(2"我的名字");  
  24.      return ps;  
  25.     }  
  26.    }, keyHolder);  
  27.    System.out.println("自動插入id============================" + keyHolder.getKey().intValue());  
  28.    return keyHolder.getKey().intValue();  
  29. }  
  30. }  
評論
我比較喜歡用第三種方法:
Java程式碼 複製程式碼 收藏程式碼
  1. GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();  
  2.         SqlParameterSource paramSource = new BeanPropertySqlParameterSource(employe);  
  3.         final String sql =  "INSERT INTO `employe` (`emp_name`, `sex`, `age`,`remark`) VALUES (:name, :sex, :age, :remark)";  
  4.         namedParameterJdbcTemplate.update(sql, paramSource, generatedKeyHolder,new String[]{"id_"});  
  5.         Number number = generatedKeyHolder.getKey();  
  6.         return number.longValue();  
  1. GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();  
  2.         SqlParameterSource paramSource = new BeanPropertySqlParameterSource(employe);  
  3.         final String sql =  "INSERT INTO `employe` (`emp_name`, `sex`, `age`,`remark`) VALUES (:name, :sex, :age, :remark)";  
  4.         namedParameterJdbcTemplate.update(sql, paramSource, generatedKeyHolder,new String[]{"id_"});  
  5.         Number number = generatedKeyHolder.getKey();  
  6.         return number.longValue();  


spring的版本是3.1.1,不知道老版本的namedParameterJdbcTemplate支援不。