繁体   English   中英

Java Spring JDBC last_insert_id()

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM