2013-03-03 27 views
0

我正在使用MySQL Workbench,並將其中一列指定爲唯一密鑰。 當我檢查MySQL表時,它仍然輸入「users_name」的重複項。 我還是MySQL/Java的新手,所以我確信我只是犯了一個愚蠢的錯誤。Java和MySQL - 唯一密鑰無法使用?

System.out.print("Name: "); 
String name = sc.nextLine(); 
System.out.print("Password: "); 
String pass = sc.nextLine(); 

String SQL = String.format("INSERT INTO users (users_name, users_password) values('" + name + "','" + pass + "')"); 
PreparedStatement stmt = (PreparedStatement) connection.prepareStatement(SQL); 
stmt.executeUpdate(SQL); 

MySQL的表定義:

CREATE TABLE IF NOT EXISTS `mydb`.`users` (
`users_id` INT NOT NULL AUTO_INCREMENT , 
`users_name` VARCHAR(45) NULL , 
`users_password` VARCHAR(45) NULL , 
PRIMARY KEY (`users_id`) , 
UNIQUE INDEX `users_id_UNIQUE` (`users_id` ASC) , 
UNIQUE INDEX `users_name_UNIQUE` (`users_name` ASC)) 
ENGINE = InnoDB 
+0

重要的信息將是你的表定義 – 2013-03-03 01:55:43

+0

你是什麼意思?抱歉。 – 2013-03-03 01:56:44

+0

發佈你的SQL .. – 2013-03-03 01:57:42

回答

2

不是一個真正的答案,但非常有用的建議:

這是你應該如何使用你的PreparedStatement

String sql = "INSERT INTO users (users_name, users_password) values (?, ?);"; 
PreparedStatement stmt = connection.prepareStatement(sql); 
stmt.setString(1, name); 
stmt.setString(2, pass); 
stmt.executeUpdate(); 

要回答你真正的問題,我們需要看到表定義。

+0

+1絕對不要在您的PreparedStatement的值中使用String-concat,因爲OP在上面的代碼片段中有。 – 2013-03-03 02:58:56

+0

那麼,我做了一個新的表,具有相同的主鍵,唯一鍵,自動增量等,現在它的工作。 猜猜上次沒有工作。 – 2013-03-03 03:08:43