我有这段代码:
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 :(得分:11)
你真的不应该在字段名称中有空格。尝试用``
包围它答案 1 :(得分:3)
包含空格的列名称是 非常 错误主意。
如果你必须拥有它们,请用反引号包围它们:
`private salary`
答案 2 :(得分:1)
你在SQL查询的最后一行错过了)
所以它应该是:
+ " values (? ,?, ? , ?, ?, ?, ?, ?, ?, ?, ?, ? )";
答案 3 :(得分: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);
答案 4 :(得分:0)
您应该使用private_salary替换私人薪水,并继续使用可接受的列名约定。
答案 5 :(得分:0)
列或表名称不应包含空格。通过下划线加入他们。并使它们成为大写......这些不是规则,而是接受使用DB对象的方式。如果在数据库中无法更改名称,并且您遇到类似工资的问题,那么some salary
应该有所帮助。
答案 6 :(得分:0)
梅迪; 我认为你要做的就是这一切:
更改名称 空间命名列(私人工资, 食品工资,其他工资,bime 薪水)要么用下划线代替空格 (由命名约定推荐)或 带有重音符号的周围名字:
`box salary`,`private salary`,`food salary`,`other salary`,`bime salary`
修复此行添加最后的括号
+“值(?,?,?,?,?,?,?,?,?,?,?,?”);
必须说:
+“值(?,?,?,?,?,?,?,?,?,?,?,?); ”);
最后我建议把一个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 使用附加方法)