[英]Syntax error with SQL in Java
我在這里錯過了一些愚蠢的東西嗎?
String update = "UPDATE Patients SET fullName = '" + patient.getName() + "',
houseNum = '" + patient.getHouseNum() + "',
address = '" + patient.getAddress() +"',
postCode = '" + patient.getPostCode() + "',
condition = '" + patient.getCondition() + "',
who = '" + patient.getWho() + "',
time = '" + patient.getTime() + "',
location = '" + patient.getLocation() + "',
actionTaken = '" + patient.getActionTaken() + "',
duration = '" + patient.getDuration() + "'
WHERE regNo = '" +patient.getNHSnum()+"'";
為此,我在每個新行上返回以進行格式化。 在我的文件中,它位於一行中。 所有數據庫字段都是文本類型。
我得到的錯誤是:
[Microsoft][ODBC Microsoft Access Driver] Syntax error in UPDATE statement. -3503
編輯:
有關信息,以下工作正常:
String update = "UPDATE Patients SET fullName = '" + patient.getName() + "',
houseNum = '" + patient.getHouseNum() + "',
address = '" + patient.getAddress() +"',
postCode = '" + patient.getPostCode() + "',
condition = '" + patient.getCondition() + "'
WHERE regNo = '" +patient.getNHSnum()+"'";
編輯2:
這是完整的更新字符串:
UPDATE Patients SET fullName = 'Dave', houseNum = '5', address = 'Bla', postCode = 'PQ1 RS2', condition = 'Unknown', who = 'Test', time = 'Test1', location = 'Test2', actionTaken = 'Test3', duration = 'Test4' WHERE regNo = '1'
正如我所說,在這個例子中,數據庫中的每個字段都是文本類型
我強烈建議您使用PreparedStatements ,而不是簡單的 Statement (這會導致 SQL 注入)。
下面是使用 PreparedStatement 執行更新的示例。
String query = "UPDATE TABLENAME SET COL1=?, COL2=? WHERE somecondistrue";
Statement st = connection.preparedStatement(query);
st.setString(1, col1value);
st.setString(2, col2Value);
st.executeUpdate();
如您所見,這是使用JDBC執行SQL 查詢的更簡潔的方法。
time
是 SQL 保留字。 最好是重命名它,否則它通常是依賴於供應商的引用,偏離標准 SQL。
完全同意 PreparedStatement 的評論。
您不需要在 num 和 duration 等數字字段中使用逗號
您應該使用 PreparedStatements,因為所有字段都是字符串類型,我在這里看到的唯一問題是您正在傳遞帶有字符' 的字符串,這會產生錯誤
正如其他人所說,您應該使用准備好的語句。 事實上,請考慮您的一位患者姓名是否帶有撇號(如 O'Brien)。 准備好的語句將解決這個問題。
如果沒有看到最終查詢,很難說。
問題可能是您嘗試更新的某些值包含撇號'
或其他特殊字符。 您可以在執行語句之前打印update
字符串,看看是否是這種情況。 一個簡單的:
System.out.println("update: "+update);
將幫助您輕松查看您是否遇到此問題。 此外,就像其他人提到的那樣,如果您將使用PreparedStatement,您將不必擔心 SQL 注入問題,也不會遇到此問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.