我想通過JDBC更新/刪除在sqlite3中設置的給定表的用戶指定字段。爲此我使用了PreparedStatements。JDBC SQLite PreparedStatement更新和刪除
現在情況3:刪除sql查詢沒有語法錯誤,但它不會刪除該行。
而情況2:更新SQL查詢有語法錯誤 - 我希望它接受一個字段,更新值和條件。
我在這裏做錯了什麼?
[編輯]下面的代碼片段:http://pastebin.com/8naiXZ2v
String temp;
switch (n){
case 1: // Insert
System.out.println("Okay!");
PreparedStatement inPst = con.prepareStatement("insert into " + dob.tbName + " (roll, branch, fname, lname, cgpa)" + " values(?,?,?,?,?)");
System.out.print("Roll: ");
inPst.setString(1, in.nextLine());
System.out.print("Branch: ");
inPst.setString(2, in.nextLine());
System.out.print("Name: ");
inPst.setString(3, in.nextLine());
System.out.print("Surname: ");
inPst.setString(4, in.nextLine());
System.out.print("CGPA: ");
inPst.setString(5, in.nextLine());
inPst.executeUpdate();
break;
case 2: // Update
System.out.println("Okay!");
System.out.println("Fields: roll\tbranch\tfname\tlname\tcgpa");
PreparedStatement upPst = con.prepareStatement("update " + dob.tbName + " set ? = ? where ? ;");
System.out.print("Enter field name: ");
temp = in.nextLine();
upPst.setString(1, temp);
System.out.print("Enter field value: ");
temp = in.nextLine();
temp = "'" + temp + "'";
upPst.setString(2, temp);
System.out.print("Enter condition: ");
temp = in.nextLine();
upPst.setString(3, temp);
upPst.executeUpdate();
break;
case 3: //Delete
System.out.println("Okay!");
System.out.println("Fields: roll\tbranch\tfname\tlname\tcgpa");
PreparedStatement delPst = con.prepareStatement("delete from " + dob.tbName + " where ? = ? ;");
System.out.print("Enter key field: ");
temp = in.nextLine();
delPst.setString(1, temp);
System.out.print("Enter key value: ");
temp = in.nextLine();
temp = "'" + temp + "'";
delPst.setString(2, temp);
delPst.executeUpdate();
System.out.println("Deleted!");
break;
您不能參數化這樣的條件。一個參數只能是**值**,而不是對象名稱,當然不是謂詞。包含連接創建等也可能是一個好主意。例如,您是否禁用了autoCommit? – 2014-11-15 07:24:48
那麼有沒有辦法爲用戶指定的字段形成sql查詢來更新/刪除它們中的值? – sprkv5 2014-11-15 09:11:49