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();
}
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.SQLException;
- import java.text.ParseException;
- import org.springframework.jdbc.core.PreparedStatementCreator;
- import org.springframework.jdbc.support.GeneratedKeyHolder;
-
import org.springframework.jdbc.support.KeyHolder;
- import com.kjlink.cms.form.model.LabelForm;
- import com.kjlink.cms.service.BaseService;
- publicclass ff extends BaseService {
- publicint insertTable(LabelForm f) throws SQLException,ParseException
- {
- String content = f.getSiteId();
-
final String sql = "insert into TAG_INFO(SITE_ID,NAME,CONTENT) values(?,?,'"
- KeyHolder keyHolder = new GeneratedKeyHolder();
- getJdbcTemplate().update(
- new PreparedStatementCreator() {
- public PreparedStatement createPreparedStatement(Connection con) throws SQLException
- {
- PreparedStatement ps = getJdbcTemplate().getDataSource()
- .getConnection().prepareStatement(sql,new String[]{ "SITE_ID" ,"NAME"});
- ps.setString(1, "站點號");
- ps.setString(2, "我的名字");
- return ps;
- }
- }, keyHolder);
- System.out.println("自動插入id============================" + keyHolder.getKey().intValue());
- return keyHolder.getKey().intValue();
- }
- }
評論
我比較喜歡用第三種方法:Java程式碼
- GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();
- SqlParameterSource paramSource = new BeanPropertySqlParameterSource(employe);
- final String sql = "INSERT INTO `employe` (`emp_name`, `sex`, `age`,`remark`) VALUES (:name, :sex, :age, :remark)";
- namedParameterJdbcTemplate.update(sql, paramSource, generatedKeyHolder,new String[]{"id_"});
- Number number = generatedKeyHolder.getKey();
- return number.longValue();
- GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();
- SqlParameterSource paramSource = new BeanPropertySqlParameterSource(employe);
- final String sql = "INSERT INTO `employe` (`emp_name`, `sex`, `age`,`remark`) VALUES (:name, :sex, :age, :remark)";
- namedParameterJdbcTemplate.update(sql, paramSource, generatedKeyHolder,new String[]{"id_"});
- Number number = generatedKeyHolder.getKey();
- return number.longValue();
spring的版本是3.1.1,不知道老版本的namedParameterJdbcTemplate支援不。