所以這是我的桌子
CREATE TABLE "client" (
"id" INTEGER,
"name" TEXT COLLATE NOCASE,
"surname" TEXT COLLATE NOCASE,
"number" TEXT UNIQUE COLLATE NOCASE,
"car_brand" TEXT,
"modele" TEXT,
"phone_nbr" TEXT,
PRIMARY KEY("id" AUTOINCREMENT));
當我從我的 java 應用程式添加一個新的陳述句時,我只能向列號添加一次 NULL,但我可以從 db 瀏覽器添加許多空值,這是我使用的代碼
String number = tf_number.getText();
if(tf_number.getText().trim().isEmpty())
number = null;
String name = tf_name.getText();
String surname = tf_surname.getText();
String phoneNbr = tf_phoneNbr.getText();
String car_brand = tf_brand.getText();
String modele = tf_modele.getText();
Client c = new Client(name, surname, number, car_brand, modele, phoneNbr);
ClientCRUD pcd = new ClientCRUD();
pcd.addClient(p);
這是sql錯誤
[SQLITE_CONSTRAINT_UNIQUE] UNIQUE 約束失敗(UNIQUE 約束失敗:client.number)
這是 addClient() 函式
public void addClient(Client t) {
try {
String requete = "INSERT INTO CLIENT(name,surname,number,car_brand,MODELE,phone_nbr)"
"VALUES ('" t.getClientName() "','" t.getClientSurname() "','" t.getNumber() "',"
"'" t.getCarBrand() "','" t.getModele() "','" t.getPhone() "')";
Statement st = MyConnection.getInstance().getCnx()
.createStatement();
st.executeUpdate(requete);
System.out.println("Client added");
} catch (SQLException ex) {
System.out.println(ex.getMessage());
}
}
任何解決方案?
uj5u.com熱心網友回復:
您的代碼插入字串“null”而不是像瀏覽器那樣真正的空值。因此,該唯一列中只能有 1 個值為“null”的字串。
您可以使用帶引數的 PreparedStatement 而不是您使用的陳述句。例如:
PreparedStatement preparedStatement = connection.prepareStatement(sql))
這回答了如何使用準備好的陳述句插入空值:使用準備好的陳述句插入空值
并且您用于查詢的 sql 字串應該具有引數。查看有關準備好的陳述句的更多資訊:準備好的陳述句教程
uj5u.com熱心網友回復:
public void save(Person person) {
String query = "INSERT INTO person_info ("
" name_p, "
" age, "
" address, "
" email "
")"
"VALUES(?, ?, ?, ?)";
try(Connection connection = dbConnection.getConnection()) {
PreparedStatement prepStatement = connection.prepareStatement(query);
prepStatement.setString(1, person.getName());
prepStatement.setInt(2, person.getAge());
prepStatement.setString(3, person.getAddress());
prepStatement.setString(4, null);
prepStatement.execute();
}
catch (SQLException e){
e.printStackTrace();
}
}
##這將解決您的問題
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/325073.html
