[英]Java Spring JDBC last_insert_id()
我有一个Web服务和一个数据库(MySQL),我创建了一个名为batch的表,每次添加一些值(唯一键)时,该表必须生成。
CREATE TABLE batch (
id INT AUTO_INCREMENT PRIMARY KEY,
description VARCHAR(250) NOT NULL
);
这是数据库表的代码,这就是我到目前为止编写的内容:
static final String addBatchIdSql = "INSERT INTO batch" + "(description)" + "VALUES (?)";
static final String getBatchIdSql = "SELECT LAST_INSERT_ID()";
@Override
public int getBatchId() {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String batchIDcreation = dateFormat.format(new Date());
jdbcTemplate.update(addBatchIdSql, batchIDcreation);
SqlRowSet rowSet = jdbcTemplate.queryForRowSet(getBatchIdSql);
while (rowSet.next()) {
System.out.println(rowSet.findColumn("id"));
}
return 0;
}
问题是,每次尝试获取ID时,它都会引发异常,指出“无效的列名”,我通常检查了应用程序中的命名属性,但未发现任何问题,这里可能出了问题://
您可以尝试将应用程序调用LAST_INSERT_ID()
返回的列作为别名:
static final String getBatchIdSql = "SELECT LAST_INSERT_ID() AS id";
完整代码:
static final String addBatchIdSql = "INSERT INTO batch" + "(description)" + "VALUES (?)";
static final String getBatchIdSql = "SELECT LAST_INSERT_ID() AS id";
@Override
public int getBatchId() {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String batchIDcreation = dateFormat.format(new Date());
jdbcTemplate.update(addBatchIdSql, batchIDcreation);
SqlRowSet rowSet = jdbcTemplate.queryForRowSet(getBatchIdSql);
if (rowSet.next()) {
System.out.println(rowSet.findColumn("id"));
}
return 0;
}
尝试执行此操作,因为您的ID为自动递增,因此最后一个插入ID为您的最大ID
static final String getBatchIdSql = "SELECT MAX(id) AS id FROM batch";
总代码:
static final String addBatchIdSql = "INSERT INTO batch" + "(description)" + "VALUES (?)";
static final String getBatchIdSql = "SELECT MAX(id) AS id FROM batch";
@Override
public int getBatchId() {
DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String batchIDcreation = dateFormat.format(new Date());
jdbcTemplate.update(addBatchIdSql, batchIDcreation);
SqlRowSet rowSet = jdbcTemplate.queryForRowSet(getBatchIdSql);
if (rowSet.next()) {
System.out.println(rowSet.findColumn("id"));
}
return 0;
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.