2012-07-05 621 views
0

我在一個MySQL數據庫中使用for循環做了一些插入操作。Java和MySQL:'主鍵'異常的重複值

我有一個自動遞增的問題,原因是第一次插入後我得到一個com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException。

下面的代碼:

for (int i=0; i<numKeys; i++) { 
try { 
    stm1 = this.db_connection.prepareStatement("INSERT INTO mytable (Cod, Prop, Field, Value) VALUES (?,?,?,?)"); 
    stm1.setInt(1, Statement.RETURN_GENERATED_KEYS); 
    stm1.setInt(2, 0); 
    stm1.setString(3, aname); 
    stm1.setString(4, avalue); 
     stm1.executeUpdate(); 
    } catch (SQLException e) { 
     e.printStackTrace(); 
    } 
} 

鱈魚是一種自動遞增場。

回答

2

如果它是一個自動遞增的字段,那麼沒有理由將它作爲參數傳入,只是不要將其包含在Insert語句中。

stm1 = this.db_connection.prepareStatement("INSERT INTO mytable (Prop, Field, Value) VALUES (?,?,?)"); 

並刪除下面適當的setInt方法。

0

如果Cod是自動增量,則不需要插入它。你應該嘗試下面的代碼。

for (int i=0; i<numKeys; i++) { 
try { 
    stm1 = this.db_connection.prepareStatement("INSERT INTO mytable (Prop, Field, Value) VALUES (?,?,?)"); 
    stm1.setInt(1, 0); 
    stm1.setString(2, aname); 
    stm1.setString(3, avalue); 
    stm1.executeUpdate(); 
} catch (SQLException e) { 
    e.printStackTrace(); 
} 

}

+1

我不認爲這會工作,您正在將不同數量的參數傳遞給sql語句中的值。請參閱下面的答案。爲了澄清,你需要刪除其中的一個?在你的sql語句的值部分,因此只有3個。 – 2012-07-05 09:07:07

+0

@JonTaylor是我的錯! Thnks! – sergiofbsilva 2012-07-05 09:11:21

1

Statement.RETURN_GENERATED_KEYS是INT常數,

如果你嘗試添加它的多個時間相同的主鍵,將無法添加

+0

那麼,事實上它是一個自動增量字段,所以他真的不應該自己設置它的值。 – 2012-07-05 09:05:37