`

使用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();

}
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics