【问题标题】:UcanAccess:::4.0.2 Unexpected token: 164 Update QueryUcanAccess:::4.0.2 意外令牌:164 更新查询
【发布时间】:2017-11-14 23:39:51
【问题描述】:

我需要制作一个 Jar 来格式化 Access 数据库中的电话号码并为此使用 UcanAccess,所有查询都可以正常工作,直到我需要使用格式化的电话号码更新数据库列。

public void updatePhonenumberColumn()
{
    try {
        for (int i = 0; i < this.phoneNumbers.size(); i++) {
            String SQL = "UPDATE [" + this.table + "] SET [" + this.phonenumberColumn + "]=" + this.phoneNumbers.get(i) + " WHERE [" + this.id + "]=" + i;
            PreparedStatement preparedStatement = connection.prepareStatement(SQL);
            preparedStatement.executeUpdate();
        }
    } catch (SQLException e) {
        System.err.println(e.getMessage() + "\nErrorcode: " + e.getErrorCode());
    }
}

我尝试使用其他帖子中建议的括号,格式化的电话号码由我自己存储在一个 ArrayList 中,然后我尝试使用更新语句添加。如果有不清楚的地方,我会尝试提供更多信息。

我尝试使用 ResultSet.next() 并注意到 while 循环立即离开,好像 ResultSet 将为空,这是不可能的,因为我之前使用完全相同的代码将电话号码附加到我的 ArrayList。

    public void updatePhonenumberColumn()
{
    String sql = "SELECT " + this.phonenumberColumn + " FROM " + this.table;

    try {
        Statement statement = connection.createStatement();
        this.resultSet = statement.executeQuery(sql);
        System.out.println(this.resultSet.getFetchSize());
    } catch (SQLException e) {
        System.err.println(e.getMessage() + "\nErrorcode: " + e.getErrorCode());
    }
}

在前面的查询下从 Access 数据库中获取电话号码

    public void executeQueryPhoneNumber(String tableName, String columnName)
{
    this.actualColumn = columnName;
    this.phonenumberColumn = columnName;
    this.table = tableName;
    try {
        this.query = this.connection.createStatement();
        this.resultSet = query.executeQuery("SELECT " + this.phonenumberColumn + " FROM " + this.table);
        appendItems(this.phoneNumbers, this.resultSet);
    } catch (SQLException e) {
        System.err.println(e.getMessage() + "\nErrorCode: " + e.getErrorCode());
    }

}

我会非常感谢任何想法

【问题讨论】:

    标签: java sql ms-access jdbc ucanaccess


    【解决方案1】:

    “Unexpected token: 164”听起来您的电话号码中有空格,并且您的动态 SQL 失败。您应该使用 参数化查询,如下所示:

    String sql = "UPDATE [" + this.table + "] SET [" + this.phonenumberColumn + "]=? WHERE [" + this.id + "]=?";
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    for (int i = 0; i < this.phoneNumbers.size(); i++) {
        preparedStatement.setString(1) = this.phoneNumbers.get(i);
        preparedStatement.setInt(2) = i;
        preparedStatement.executeUpdate();
    }
    

    【讨论】:

      猜你喜欢
      • 2015-11-19
      • 2018-02-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-14
      • 1970-01-01
      相关资源
      最近更新 更多