2011-03-26 36 views
1

我有這樣的代碼:問題的一份聲明中

Date start = new Date(Integer.parseInt(jTextField4.getText()), Integer.parseInt(jTextField16.getText()), Integer.parseInt(jTextField17.getText())); 
     Date end = new Date(Integer.parseInt(jTextField5.getText()), Integer.parseInt(jTextField18.getText()), Integer.parseInt(jTextField19.getText())); 
     statement = connection.createStatement(); 
     preparedStatement1 = connection.prepareStatement("insert into sportmangg(customer_code," 
      + "sportman_code, start, finish, salary,amount,box salary,private salary, food salary, " 
      + "other salary, bime salary, number) " 
      + "values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?"); 
     preparedStatement1.setString(1,jTextField15.getText()); 
    preparedStatement1.setString(2, jTextField1.getText()); 
    preparedStatement1.setDate(3, start); 
    preparedStatement1.setDate(4, end); 
    preparedStatement1.setInt(5, Integer.parseInt(jTextField6.getText())); 
    preparedStatement1.setInt(6,Integer.parseInt(jTextField14.getText())); 
    preparedStatement1.setInt(7, Integer.parseInt(jTextField7.getText())); 
    preparedStatement1.setInt(8, Integer.parseInt(jTextField8.getText())); 
    preparedStatement1.setInt(9, Integer.parseInt(jTextField9.getText())); 
    preparedStatement1.setInt(10, Integer.parseInt(jTextField11.getText())); 
    preparedStatement1.setInt(11, Integer.parseInt(jTextField10.getText())); 
    preparedStatement1.setInt(12, Integer.parseInt(jTextField20.getText())); 
    preparedStatement1.executeUpdate(); 

但它有這個錯誤:

You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'salary,private salary, food salary, other salary, bime salary, number) values ('' at line 1 

問題是什麼?

+0

@diEcho,這是java not javascript – krock 2011-03-26 12:41:01

+0

你增加了一個賞金,但是請你說明爲什麼這兩個答案你不適用? – jzd 2011-03-29 18:34:36

+0

我按**錯**。我能做些什麼直到取消它? – 2011-03-29 21:24:59

回答

11

你真的不應該在字段名稱中有空格。嘗試使用帶空格``

+2

或者只是用下劃線_替換空格,並忘記' – 2011-03-30 10:15:20

3

列名周圍是一個非常壞主意。

如果你必須有他們,包圍他們與反引號:

`private salary` 
+1

這些不是反引號。 – 2011-04-03 07:07:46

+0

請編輯。 – duffymo 2011-04-04 13:06:30

+0

好的,我編輯過它。我從來沒有在StackOverflow的markdown語法中找到一種將文字反引號放入內聯代碼格式的方法,所以我必須創建一個新的縮進格式,以便區分代碼。 – 2011-04-04 14:36:38

0

您應該更換private_salary私人薪水,並保持在可接受的列名公約的工作。

1

您在您的SQL查詢的最後一行錯過)所以它應該是:

+ " values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ? )"; 
0

列或表名不能有空格。通過下劃線加入他們。並使它們成爲大寫......這些不是規則,而是接受使用DB對象的方式。如果名稱不能在數據庫中更改,而且您的薪水有些滯後,那麼some salary應該有所幫助。

0

mehdi; 我認爲你必須做的是這一切:

  1. 空間命名的列(私人工資, 食品工資,其他工資,BIME 工資)要麼由下劃線 替代空間的變化名(由命名約定推薦)或通過與 抑音符字符周圍的名稱:

    `box salary`, `private salary`, `food salary`, `other salary`, `bime salary`

  2. 修復此線添加最終到達括號

    + "values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ?");

    它必須說:

    + "values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);");

  3. 最後,我建議你拿出prepareStatement參數爲String或StringBuffer的變量,說「的SqlString」什麼的,這樣你就可以更透明地操作它。事情是這樣的:

String sqlString = ""; 
sqlString += " insert into sportmangg"; 
sqlString += " (customer_code, sportman_code, start, finish,"; 
sqlString += " salary, amount, box_salary, private_salary,"; 
sqlString += " food_salary, other_salary, bime_salary, number)"; 
sqlString += " values (?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?, ?);"; 
preparedStatement1 = connection.prepareStatement(sqlString); 

(或者,如果你使用StringBuffer的使用追加法)

1

也許你可以試試這個:
https://github.com/stuparmihailo/util4j/releases/tag/v1.0
這是一些簡單的項目,具有良好的創建對賬單的方式:
String query = "INSERT INTO table VALUES (?,?,?,?,?,?,?)"; PreparedStatement stmt = con.prepareStatement(query); StatementUtil.fill(stmt, 45, "text", 2, null, new Date(), false, 3.5);