首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Java MySQL 插入資料主鍵衝突:正確使用自增主鍵

     編輯:程式設計綜合問答

錯誤訊息

com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry '1' for key 'PRIMARY'

原因分析

程式碼嘗試手動指定主鍵值:

if (c.getId() == -1) {
    sql = "insert into category values(null,?,?,?,?,?)"; // 正確:null 讓自增生效
} else {
    sql = "insert into category values(" + c.getId() + ",?,?,?,?,?)"; // 錯誤:手動給 ID 導致重複
}

解決方案

  1. 資料表定義主鍵自增:
    CREATE TABLE category (
        id INT PRIMARY KEY AUTO_INCREMENT,
        name VARCHAR(50), ...
    );
  2. 插入時完全不指定 id 欄位:
    String sql = "INSERT INTO category (name, descr, pid, isleaf, grade) VALUES (?, ?, ?, ?, ?)";
  3. 若需獲取自增 ID,使用 Statement.RETURN_GENERATED_KEYS:
    PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);
    ps.executeUpdate();
    ResultSet rs = ps.getGeneratedKeys();
    if (rs.next()) { int generatedId = rs.getInt(1); }

關鍵原則

  • 自增主鍵交給資料庫管理,應用層勿干涉
  • 明確列出插入欄位(INSERT INTO table (col1, col2)...),避免結構變更導致錯誤
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved