JdbcTemplate下访问Oracle数据库插入数据时返回序列增长的主键
2016-05-08 20:10
513 查看
使用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代码
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;
public class ff extends BaseService {
public int insertTable(LabelForm f) throws SQLException,ParseException
{
String content = f.getSiteId();
final String sql = "insert into TAG_INFO(SITE_ID,NAME,CONTENT) values(?,?,'"+content+"')";
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();
}
}
评论
1 楼 pch272215690 2013-06-18
我比较喜欢用第三种方法:
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();
[java] view
plain copy
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支持不。
使用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代码
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;
public class ff extends BaseService {
public int insertTable(LabelForm f) throws SQLException,ParseException
{
String content = f.getSiteId();
final String sql = "insert into TAG_INFO(SITE_ID,NAME,CONTENT) values(?,?,'"+content+"')";
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();
}
}
评论
1 楼 pch272215690 2013-06-18
我比较喜欢用第三种方法:
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();
[java] view
plain copy
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支持不。
相关文章推荐
- 安装oracle和plsql时的一点感想
- Navicat备份远程Oracle数据库到本地
- 4. Oracle PL/SQL语言及编程
- Oracle死锁解决
- centos7系统安装oracle11g指南
- oracle创建表空间
- Spring访问oracle数据库配置步骤
- Oracle 在Spring+Hibernate中的使用
- Oracle中Null与空字符串' '的区别
- Oracle 12c 简单的jdbc使用
- oracle 11g SQL语句补充学习
- Oracle 12c Windows安装、介绍及简单使用(图文)
- ORA-12154TNS无法解析指定的连接标识符
- azure 云上 oracle11.2.0.4里dataguard归档日志传输 1034 问题详细解决过程
- paoracle中的包头(Package)与包体(Package body)
- oracle中utl_file包读写文件操作实例学习
- Oracle的UTL_FILE.FOPEN学习笔记
- Oracle之UTL_FILE 包用法详解
- oracle触发器类型
- ORACLE EXPDP命令使用详细