簡體   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