JdbcTemplate下访问Oracle数据库插入数据时返回序列增长的主键

时间:2021-08-11 21:47:47

使用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代码  JdbcTemplate下访问Oracle数据库插入数据时返回序列增长的主键  JdbcTemplate下访问Oracle数据库插入数据时返回序列增长的主键JdbcTemplate下访问Oracle数据库插入数据时返回序列增长的主键
  1. import java.sql.Connection;  
  2. import java.sql.PreparedStatement;  
  3. import java.sql.SQLException;  
  4. import java.text.ParseException;  
  5.   
  6. import org.springframework.jdbc.core.PreparedStatementCreator;  
  7. import org.springframework.jdbc.support.GeneratedKeyHolder;  
  8. import org.springframework.jdbc.support.KeyHolder;  
  9.   
  10. import com.kjlink.cms.form.model.LabelForm;  
  11. import com.kjlink.cms.service.BaseService;  
  12.   
  13. public class ff extends BaseService {  
  14.   
  15. public int insertTable(LabelForm f) throws SQLException,ParseException   
  16. {  
  17. String content = f.getSiteId();  
  18. final String sql = "insert into TAG_INFO(SITE_ID,NAME,CONTENT) values(?,?,'"+content+"')";  
  19. KeyHolder keyHolder = new GeneratedKeyHolder();  
  20. getJdbcTemplate().update(  
  21.    new PreparedStatementCreator() {  
  22.     public PreparedStatement createPreparedStatement(Connection con) throws SQLException   
  23.     {  
  24.      PreparedStatement ps = getJdbcTemplate().getDataSource()  
  25.        .getConnection().prepareStatement(sql,new String[]{ "SITE_ID" ,"NAME"});  
  26.      ps.setString(1"站点号");  
  27.      ps.setString(2"我的名字");  
  28.      return ps;  
  29.     }  
  30.    }, keyHolder);  
  31.    System.out.println("自动插入id============================" + keyHolder.getKey().intValue());  
  32.    return keyHolder.getKey().intValue();  
  33. }  
  34. }  






评论


1 楼  pch272215690 2013-06-18  
我比较喜欢用第三种方法:
Java代码  JdbcTemplate下访问Oracle数据库插入数据时返回序列增长的主键  JdbcTemplate下访问Oracle数据库插入数据时返回序列增长的主键JdbcTemplate下访问Oracle数据库插入数据时返回序列增长的主键
  1. GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();  
  2.         SqlParameterSource paramSource = new BeanPropertySqlParameterSource(employe);  
  3.           
  4.         final String sql =  "INSERT INTO `employe` (`emp_name`, `sex`, `age`,`remark`) VALUES (:name, :sex, :age, :remark)";  
  5.           
  6.         namedParameterJdbcTemplate.update(sql, paramSource, generatedKeyHolder,new String[]{"id_"});  
  7.           
  8.         Number number = generatedKeyHolder.getKey();  
  9.           
  10.         return number.longValue();  
[java]  view plain  copy
  1. GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();  
  2.         SqlParameterSource paramSource = new BeanPropertySqlParameterSource(employe);  
  3.           
  4.         final String sql =  "INSERT INTO `employe` (`emp_name`, `sex`, `age`,`remark`) VALUES (:name, :sex, :age, :remark)";  
  5.           
  6.         namedParameterJdbcTemplate.update(sql, paramSource, generatedKeyHolder,new String[]{"id_"});  
  7.           
  8.         Number number = generatedKeyHolder.getKey();  
  9.           
  10.         return number.longValue();  


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