簡體   English   中英

Java 中 SQL 的語法錯誤

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM