2011-03-26 89 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);