jdbcTemplate获得数据库生成的主键值

本文详细描述了如何使用Spring Data JPA的transactionTemplate执行SQL插入操作,并通过GeneratedKeyHolder获取返回的主键值,确保在事务中安全地进行数据操作。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

JSONObject obj = new JSONObject();
			obj.put("code", transactionTemplate.execute(new TransactionCallback<Integer>() {
						@Override
						public Integer doInTransaction(TransactionStatus status) {
							Object spt = status.createSavepoint();
							
							try {
								
								final String sql = "insert into article (title, content, source, keyword, intro,"
										+ " type, author, recommend, headline,leaveNumber,clickNumber,userid,"
										+ "createtime,updatetime,deploytime) values"
										+ " (?, ?, ?, ?, ?, ?, ?, ?,?, ?, ?, ?, ?, ?, ?) ";

								
								KeyHolder keyHolder = new GeneratedKeyHolder();
								jdbcTemplate.update(new PreparedStatementCreator() {
									
									@Override
									public PreparedStatement createPreparedStatement(Connection conn)
											throws SQLException {
										PreparedStatement pstat = conn.prepareStatement(sql,PreparedStatement.RETURN_GENERATED_KEYS);
										pstat.setString(1, title);
										pstat.setString(2, content);
										pstat.setString(3, source);
										pstat.setString(4, keyword);
										pstat.setString(5, intro);
										pstat.setString(6, type);
										pstat.setString(7, author);
										pstat.setString(8, recommend);
										pstat.setString(9, headline);
										pstat.setString(10, leaveNumber);
										pstat.setString(11, clickNumber);
										pstat.setString(12, userid);
										pstat.setDate(13, new java.sql.Date(new  java.util.Date().getTime()));
										pstat.setDate(14, new java.sql.Date(new  java.util.Date().getTime()));
										pstat.setDate(15, new java.sql.Date(new  java.util.Date().getTime()));
										return pstat;
									}
								}, keyHolder);
								System.out.println("PK: " + keyHolder.getKey().intValue());
								/*String sqls = "insert into channel_article (articleid, channelid) values (?, ?)";
								jdbcTemplate.update(sqls, articleid, channelid);*/
								status.releaseSavepoint(spt);
								return 0;
							} catch (Exception e) {
								status.rollbackToSavepoint(spt);
								return -1;
							}
						}
					}));
		response.getWriter().write(obj.toString());

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值