spring jdbctemplate批量删除插入 怎么获得数据库自动增长的id

java 使用JdbcTemplate插入数据代码 - 为程序员服务
为程序员服务
使用JdbcTemplate插入数据代码
package cn.outofmemory.snippets.
import java.sql.T
import java.util.D
import javax.sql.DataS
import org.springframework.jdbc.core.JdbcT
import org.springframework.jdbc.datasource.DriverManagerDataS
public class InsertRecordInDatabaseWithJdbcTemplate {
private static final String driverClassName = &com.mysql.jdbc.Driver&;
private static final String url = &jdbc:mysql://localhost/companydb&;
private static final String dbUsername = &jcg&;
private static final String dbPassword = &jcg&;
private static final String insertSql =
&INSERT INTO employee (& +
surname, & +
title, & +
created) & +
&VALUES (?, ?, ?, ?)&;
private static DataSource dataS
public static void main(String[] args) throws Exception {
dataSource = getDataSource();
saveRecord(&John&, &Black&, &Software developer&, new Date());
saveRecord(&Tom&, &Green&, &Project Manager&, new Date());
public static void saveRecord(String name, String surname, String title, Date created) {
JdbcTemplate template = new JdbcTemplate(dataSource);
// define query arguments
Object[] params = new Object[] { name, surname, title, new Date() };
// define SQL types of the arguments
int[] types = new int[] { Types.VARCHAR, Types.VARCHAR, Types.VARCHAR, Types.TIMESTAMP };
// execute insert query to insert the data
// return number of row / rows processed by the executed query
int row = template.update(insertSql, params, types);
System.out.println(row + & row inserted.&);
public static DriverManagerDataSource getDataSource() {
DriverManagerDataSource dataSource = new DriverManagerDataSource();
dataSource.setDriverClassName(driverClassName);
dataSource.setUrl(url);
dataSource.setUsername(dbUsername);
dataSource.setPassword(dbPassword);
return dataS
CREATE TABLE `companydb`.`employee` (
`id` INTEGER UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(45) NOT NULL,
`surname` VARCHAR(45) NOT NULL,
`title` VARCHAR(45) NOT NULL,
`created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
1 row inserted.
1 row inserted.
您可能的代码
相关聚客文章
相关专栏文章Spring的JdbcTemplate插入操作返回主键ID的方法 -
- ITeye技术网站
Spring的JdbcTemplate插入操作返回主键ID的方法:Srping 2.5
* 妞见妞爱
* 增加并且获取主键
* @param sql sql语句
* @param params 参数
* @return 主键
Long insertAndGetKey(final String sql, final SmsBean smsbean) {
KeyHolder keyHolder = new GeneratedKeyHolder();
jdbcTemplate.update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection connection) throws SQLException {
//String sql_sms = "insert into
sms(title,content,date_s,form,sffs,by1,by2,by3) values (?,?,'"+dates+"',?,?,?,?,?)";
PreparedStatement ps = connection.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ps.setString(1, smsbean.getTitle());
ps.setString(2, smsbean.getContent());
ps.setString(3, smsbean.getForm());
ps.setString(4, smsbean.getSffs());
* by1 存放的是 草稿主人的ID
* 当消息为发送。清楚by1的ID
ps.setString(5, "");
ps.setString(6, smsbean.getBy2());
ps.setString(7, smsbean.getBy3());
}, keyHolder);
Long generatedId = keyHolder.getKey().longValue();
return generatedId;
上面是我开发中的代码...但是一直有个问题没解决
就是 在这个方法中保存日期的时候老是报错。。
由于项目时间紧 也没时间去研究...所以就把 日期 拼接在 sql 语句中了。。。O(∩_∩)O哈哈~
有空我在测试...今天先到这里....
浏览 11852
int result = 0;
final String sql = "insert into Tstudent (username , password , address , time) values ( ? , ? , ? , ?)";
KeyHolder holder=new GeneratedKeyHolder();
result=jdbcTemplate.update(new PreparedStatementCreator() {
public PreparedStatement createPreparedStatement(Connection con)
throws SQLException {
PreparedStatement ps=con.prepareStatement(sql,Statement.RETURN_GENERATED_KEYS);
ps.setString(1, student.getUsername());
ps.setString(2, student.getPassword());
ps.setString(3, student.getAddress());
ps.setDate(4, new Date(student.getTime().getTime()));
}, holder);
//
KeyHolder holder = new GeneratedKeyHolder();
//
result = namedParameterJdbcTemplate.update(sql,
//
new BeanPropertySqlParameterSource(student), holder);
System.out.println(holder.getKey().intValue());
哥们这样就可以了,你获得date是java.util里面的,而java.sql是java.util的子类,
喔喔。。谢谢。。嘿嘿
yangpanwww
浏览: 204126 次
来自: 杭州
qq_ 写道大哥,能给我发下jar包吗,我弄你 ...
大哥,能给我发下jar包吗,我弄你这个代码,导jar包都导了1 ...
太牛了!必须顶
非常感谢!受教了!
不错,学习了....使用spring的jdbcTemplate-----用JDBC模板查询数据库 - 老男人 - ITeye技术网站
博客分类:
JdbcTemplate类声明了几个重载的query()模板方法来控制整个查询过程,就像进行更新数据操作一样,通过实现PreparedStatementCreator和PreparedStatementSetter接口,也可以覆盖语句创建任务。
1,用RowCallbackHandler提取数据
RowCallbackHandler是允许处理结果集当前行的主要接口,JdbcTemplate中的一个query()方法能替你迭代结果集,并为每一行调用RowCallbackHandler,因此,对于返回结果集中的每一行,processRow()方法都会被调用一次
public class JdbcUserDao implements UserDao{
public User findByUserId(int id){
String sql ="select *from user where id =?";
JdbcTemplate jdbcTemplate
= new JdbcTemplate(dataSource);
final User user = new User();
jdbcTemplate.query(sql,new Objcet[]{id},new RowCallbackHandler(){
public void processRow(ResultSet rs)throws Exception{
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
由于最多只能返回SQL查询结果中的一行记录,因此可以以局部变量的形式创建一个User对象,并从结果集中提取数据来设置它的属性,对于不止一行的结果集来说,应该将对象收集成一个列表,
2,用RowMapper提取数据
RowMapper比RowCallbackHandler更为通用,它的目的是将结果集的单独一行映射到自定义的对象上,因此它适用于单行和多行结果集,从重用的角度考虑,最好将RowMapper接口实现为一般通用的类,而非内部类,在这个接口的mapRow()方法中,必须构建表示行数据的对象,并将它作为方法的返回值
public class UserRowMapper implements RowMapper{
public Object mapRow(ResultSet rs ,int rowNum)throws SQLException{
= new User();
user.setId(rs.getInt("id"));
user.setUsername(rs.getString("username"));
user.setPassword(rs.getString("password"));
RowMapper可以用于单行或者多行的结果集,比如在像findByUserId()这样的方法中,查询唯一对象时,必须调用JdbcTemplate的queryForObject()方法,
public class JdbcUserDao implements UserDao{
...........
public User findByUserId(int id){
String sql ="select *from user where id =?";
JdbcTemplate jdbcTemplate
= new JdbcTemplate(dataSource);
User user =(User)jdbcTemplate.queryForObject(sql,new Object[]{id},new UseRowMapper());
spring2.5提供了一个更便利的RowMapper实现--BeanPropertyRowMapper,它可以自动的将某一行数据映射到指定类的新实例中,它首先将这个类实例化,然后通过名称匹配的方法,将每个列的值都映射到属性中。
public class JdbcUserDao implements UserDao{
public User findByUserId(int id){
String sql ="select *from user where id = ?";
JdbcTemplate jdbcTemplate
= new JdbcTemplate(dataSource);
User user =(User)jdbcTemplate.queryForObject(sql,new Object[]
{id},BeanPropertyRowMapper.newInstance(User.class));
3,查询多行
现在我们来看看如何查询一个带有多行记录的结果集。
public interface UserDao{
public List&User& findAll();
没哟RowMapper的帮助,仍然可以调用queryForList()方法,传递一个sql语句,返回的结果集是Map列表,每个Map保存结果集中的一个行,用列名称做键。
public class JdbcUserDao implements UserDao{
public List&User& findAll(){
String sql ="select *from user";
JdbcTemplate jdbcTemplate
= new JdbcTemplate(dataSource);
List&User& lists = new ArrayList&User&();
List&Map& rows = jdbcTemplate.queryForList(sql);
for(Map row: rows){
= new User();
user.setId((int)row.get("id"));
user.setUsername((String)row.get("username"));
user.setPasword((String)row.get("password"));
lists.add(user);
通过下面的代码测试findAll方法
public class Main{
public static void main(String[] args){
UserDao userdao = new JdbcUserDao();
List&User& user =userdao.findAll();
for(User u: user){
System.out.println("id :"+user.getId());
System.out.println("username :"+user.getUsername());
System.out.println("password :"+user.getPassword());
如果使用RowMapper对象映射结果对象中的数据行,就能从query()方法中得到一个映射对象的列表,
public class JdbcUserDao implements UserDao{
public List&User& findAll(){
String sql = "select *from user";
JdbcTemplate jdbcTemplate
= new JdbcTemplate(dataSource);
List&User& users = jdbcTemplate.query(sql,BeanPropertyRowMapper.newInstance(User.class));
4,查询单值
最后,看看如何查询单行和单列的结果集。
public interface UserDao{
public String getUsername(int id);
public int countAll();
要查询单独的字符串值,可以调用重载的queryForObject方法,对于整型值而言,可以调用queryForInt()方法,
public class JdbcUserDao implements UserDao{
public String getUsername(int id){
String sql = "select username from user where id =?";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
String username =(String)jdbcTempalte.queryForObject(sql,new Object[]{id},String.class);
public int countAll(){
String sql ="select count(*) from user";
JdbcTemplate jdbcTemplate = new JdbcTemplate(dataSource);
int count = jdbcTemplate.queryForInt(sql);
可以通过下面的代码测试上面的数据
public class Main{
public static void main(String[] args){
UserDao dao =new JdbcUserDao();
int count = dao.countAll();
System.out.println("user count :"+count);
String username = dao.getUsername(1);
System.out.println("username is "+ username);
浏览: 212763 次
来自: 深圳
高亮得到的集合在返回到前台时自动就是红色显示的吗?还是需要再处 ...
hickeyhao 写道我也想看看,经理让我弄 死活不亮啊hi ...
我也想看看,经理让我弄 死活不亮啊
[color=red][/color]spring JdbcTemplate批量插入 怎么获得数据库自动增长的id_百度知道
spring JdbcTemplate批量插入 怎么获得数据库自动增长的id
提问者采纳
; 也就是说你用jdbcTemplate只需要设置name的值就行了?),id是通过调用序列来插入的(即交给oracle解决),其它的数据库应该都差不多新增序列例.nextval,假设为xx_seq通过sql语句实现:CREATE SEQUENCE student_seq
INCREMENT BY 1
-- 每次加几个
START WITH 1
-- 从1开始计数
NOMAXVALUE
-- 不设置最大值
-- 一直累加。那么你的sql语句就可以写成insert into student values (student_seq ,新增一个序列,你的sql语句把那列直接写成xx_seq.nextval就行了,一列为id,不循环
CACHE 10,一列为
假设你要插入的表student有两列。拿oracle为例
其他类似问题
spring的相关知识
等待您来回答
下载知道APP
随时随地咨询
出门在外也不愁

我要回帖

更多关于 jdbctemplate批量更新 的文章

 

随机推荐