2014-01-12 100 views
1

我寫了一些java代碼,用於在用戶按下按鈕時將數據插入SQL Server 2012數據庫。當我運行的代碼,我得到這個錯誤:獲取「jdbc.SQLServerException:錯誤語法附近','」執行時出錯PreparedStatement

com.microsoft.sqlserver.jdbc.SQLServerException: Incorrect syntax near ','.

和它說,sqlstatement.executeUpdate();線造成的錯誤。我知道這條線不是問題。問題是我的SQL查詢,但我無法找到我的查詢是錯誤的。你能幫我嗎?

下面的代碼

count++; 
for(int count = 0; count < table_1.getRowCount(); count++){ 
    try { Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"); 
      Connection dbconbt8 = DriverManager.getConnection("" +"jdbc:sqlserver://localhost;databaseName=Store;user=sa;password=XXXXXX"); 
      String sqlQ = "INSERT INTO [dbo].[Transaction]([TransactionID],[ProductID]"+ 
      ",[TotalPrice]) VALUES ("+count+"','"+table_1.getValueAt(count, 0).toString()+"','"+sumprice+ "') "; 
      PreparedStatement sqlstatement = dbconbt8.prepareStatement(sqlQ); 
      sqlstatement.executeUpdate(); 
         sqlstatement.close(); 
         dbconbt8.close(); 
      } catch (SQLException e1) { 

          e1.printStackTrace(); 
         } catch (ClassNotFoundException e1) { 
         // TODO Auto-generated catch block 
         e1.printStackTrace(); 
        } 
        } 
+1

也去改變你的'sa'密碼! –

+2

你真的好像沒有理解PreparedStatement的要點 –

回答

7

VALUES (後缺少一個單引號 - 這應該解決這個問題:

String sqlQ = "INSERT INTO [dbo].[Transaction]([TransactionID],[ProductID]"+ 
    ",[TotalPrice]) VALUES ('"+count+"','"+table_1.getValueAt(count, 0).toString()+"','"+sumprice+ "') "; 
--      ^
--      Here 

然而,這是一個糟糕的修復:你應該重寫查詢參數,以便引用數據的問題變得毫不相干:

String sqlQ = "INSERT INTO [dbo].[Transaction]([TransactionID],[ProductID],[TotalPrice]) VALUES (?,?,?) "; 
PreparedStatement sqlstatement = dbconbt8.prepareStatement(sqlQ); 
sqlstatement.setInt(1, count); 
sqlstatement.setString(2, table_1.getValueAt(count, 0).toString()); 
sqlstatement.setInt(3, sumprice); 
sqlstatement.executeUpdate(); 
+0

所以它(幾乎)是有效的T-SQL? –

+0

@ElliottFrisch除了開放SQL注入攻擊之外,是的。 T-SQL使用方括號作爲名稱的「引號」。 – dasblinkenlight