繁体   English   中英

SQL异常:UcanaccessConnection.prepareStatement的意外令牌

[英]SQL Exception: Unexpected token for UcanaccessConnection.prepareStatement

在这段代码中,我正在检查数据库中具有特定ID的记录。 如果找不到该标识,那么将使用新记录更新数据库:

public void save() throws SQLException {
    String checkSQL = "Select count(*) as count from people where id=?";
    PreparedStatement checkStatement = con.prepareStatement(checkSQL);

    String insertSQL = "insert into people (ID, NAME, NI_NUMBER, NI_CAT, MOBILE_NUM, EMAIL, ADDRESS, AREA, POSTCODE) values(?, ?, ?, ?, ?, ?, ?, ?, ?) )";
    PreparedStatement insertStatement = con.prepareStatement(insertSQL);

    for (Employee person : people) {
        int id = person.getId();
        String name = person.getName();
        String NINumber = person.getnINumber();
        NICatagory cat = person.getnICatagory();
        String mobileNumber = person.getMobileNum();
        String email = person.getEmail();
        String address = person.getAddress();
        String area = person.getArea();
        String postcode = person.getPostCode();

        checkStatement.setInt(1, id);

        ResultSet checkResult = checkStatement.executeQuery();
        checkResult.next();

        int count = checkResult.getInt(1);

        if (count == 0) {
            System.out.println("Inserting person with id " + id);

            int col = 1;
            insertStatement.setInt(col++, id);
            insertStatement.setString(col++, name);
            insertStatement.setString(col++, NINumber);
            insertStatement.setString(col++, cat.name());
            insertStatement.setString(col++, mobileNumber);
            insertStatement.setString(col++, email);
            insertStatement.setString(col++, address);
            insertStatement.setString(col++, area);
            insertStatement.setString(col++, postcode);

            insertStatement.executeUpdate();

        } else {
            System.out.println("Updating person with id " + id);
        }

    }
    insertStatement.close();
    checkStatement.close();
}

编译后我收到错误

任何想法如何解决这个问题? 有人建议我在列名前后使用方括号,但这不能解决我的问题。 我也看到了使用Statement而不是PreparedStatement的建议,但是我不确定如何实现此方法,因为它不允许checkStatement.setInt(1,id);。

在插入语句的末尾还有一个额外的)

String insertSQL = "....... ?, ?, ?, ?, ?, ?, ?, ?) )"; 
                                                    ^
                                                    | here

应该是:

String insertSQL = "....... ?, ?, ?, ?, ?, ?, ?, ?)"; 

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM