QueryRunner 查询SQLServer数据库时问题 '?' 附近有语法错误。 Query: insert into equipmen
程序员文章站
2022-03-11 18:44:35
...
出错代码如下
public int SaveNewEquipment(Equipment equipment) throws SQLException {
QueryRunner qr = new QueryRunner(DataSourceUtils.getDataSource());
String sql = "insert into equipment values(?,?,?,?,?,?,?,?)";
return qr.update(sql, equipment.getFi_uid(),
equipment.getFi_group(),
equipment.getFi_location(),
equipment.getFi_begindate(),
equipment.getFi_enddate(),
equipment.getFi_wateryield(),
equipment.getFi_waterspeed(),
equipment.getFi_watertemperature());
}
报的错误如下:
java.sql.SQLException: com.microsoft.sqlserver.jdbc.SQLServerException: '?' 附近有语法错误。 Query: insert into equipment values(?,?,?,?,?,?,?,?) Parameters: [3e5a4a1e-35a2-41e1-94b3-4686b5cd750f, 3e5a4a1e-35a2-41e1-94b3-4686b5cd750f, 229-139-154-85-1, 2018-08-07 19:33:13, 2018-08-07 20:33:13, 20.5, 3.5, 28.5]
SQL语句在数据库中新建查询没有任何问题,看似没有错误的语句在QueryRunner下运行报错,查阅网上的一些答案后发现大部分没有用,于是一个个情况实验出结果
修改后成功的SQL语句
String sql = "insert into equipment (fi_uid,fi_group,fi_location,fi_begindate,fi_enddate,fi_wateryield," +
"fi_waterspeed,fi_watertemperature) values (?,?,?,?,?,?,?,?)";
重点在这:红色的矩形框为一个英文空格,表名后加一空格,相较于传统的sql语句就是在表名后左括号前加一个英文空格,特别注意的是:表名后不能不跟表中的各列属性,省略将解决不了报错,插入语句一直有问题
有的博客中写到在values后加两个空格或一个空格的,我的实验是可行的,但是必须确保values前的语句有各列属性名以及表名后有一个空格的前提下。
结论:相较于传统SQL语句 在插入语句中 表名后多加一个空格 另外 表中各列属性名此时不能省略
上一篇: Mybatis Example 查询条件 注意事项
下一篇: mybatis的时间条件查询sql语句