隐藏

QueryRunner 查询SQLServer数据库时问题 '?' 附近有语法错误。 Query: insert into equipmen

发布:2023/3/4 18:28:14作者:管理员 来源:本站 浏览次数:702

出错代码如下


   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语句 在插入语句中  表名后多加一个空格 另外 表中各列属性名此时不能省略