【问题标题】:[Microsoft][ODBC Microsoft Access Driver] Syntax error (missing operator) in query expression[Microsoft][ODBC Microsoft Access Driver] 查询表达式中的语法错误(缺少运算符)
【发布时间】:2015-07-15 00:11:57
【问题描述】:

需要有关 JAVA 更新查询的帮助,刚开始学习但遇到问题

执行时出现以下错误

[Microsoft][ODBC Microsoft Access Driver] 语法错误(缺失 运算符)在查询表达式“B.AWHERE ID =4”中。

MS Access 数据库文件中的数据未更新

public void update(Student s)
    {
        int w = Integer.parseInt(s.getID());

        String query = "UPDATE Student SET ID =" + w + "," + "FirstName =" + s.getFirstName() + "," + "LastName =" + s.getLastName() + "," + "Address =" + s.getAddress() + "," + "Gender =" + s.getGender() + "," + "DOB =" + s.getDOB() + "," + "Degree =" + s.getDegree() + "WHERE ID =" + w;

        try
        {
            stmt.executeUpdate(query);
        }
        catch(SQLException e)
        {
            System.out.println("Problem in Query");
            e.printStackTrace();
        }
    }

【问题讨论】:

    标签: java sql sql-update ms-access-2013


    【解决方案1】:

    将您的 UPDATE 语句更改为如下所示

    String query = "UPDATE Student SET "FirstName = '" + s.getFirstName() + 
    "'," + "LastName = '" + s.getLastName() + 
    "'," + "Address = '" + s.getAddress() + 
    "'," + "Gender = '" + s.getGender() + 
    "'," + "DOB = '" + s.getDOB() + 
    "'," + "Degree = '" + s.getDegree() + 
    "' WHERE ID = " + w;
    

    但是您的查询没有多大意义,因为您正在设置 ID = w 并检查 WHERE ID = w

    【讨论】:

    • 这样我收到以下错误 [Microsoft][ODBC Microsoft Access Driver] 参数太少。预期 6. 我也尝试从您的代码中省略 SET ID 部分,但仍然存在类似这样的错误:“UPDATE Student SET FirstName =" + s.getFirstName() + "," + "LastName =" + s.getLastName () + "," + "地址=" + s.getAddress() + "," + "性别=" + s.getGender() + "," + "DOB =" + s.getDOB() + ", " + "Degree =" + s.getDegree() + " WHERE ID =" + w;
    • 我正在尝试将数据从数据库中提取到 JFrame 字段(文本、Radia 等)中,并从那里尝试根据 Jframe 中的更改更新表中的字段。来自 JFrame 的数据存储在调用此函数的 Student 对象中,因此可以保存在 JFrame 中所做的更改,包括更改后的 ID
    • @DanishAli,在s.getDegree() + " WHERE ID =" + w;等条件中添加一个空格
    • 非常感谢拉胡尔,这很完美。字符串查询 = "UPDATE Student SET FirstName = '" + s.getFirstName() + "'," + "LastName = '" + s.getLastName() + "'," + "Address = '" + s.getAddress( ) + "'," + "Gender = '" + s.getGender() + "'," + "DOB = '" + s.getDOB() + "'," + "Degree = '" + s.getDegree () + "' WHERE ID = " + w;
    • @DanishAli,太好了。考虑接受答案,然后单击投票按钮下的复选按钮。
    【解决方案2】:

    您在整个查询中缺少字符串值的空格和撇号,例如

     "Degree =" + s.getDegree() + "WHERE ID ="
    

    正在评估为 "度数=BAWHERE ID ="

    这是无效的语法。

    编辑:我只能猜测您的 Student 对象在 getter 方法中返回字符串,所以试试这个。

    String query = "UPDATE Student SET ID =" + w + ","
        + "FirstName =\"" + s.getFirstName() + "\","
        + "LastName =\"" + s.getLastName() + "\","
        + "Address =\"" + s.getAddress() + "\","
        + "Gender =\"" + s.getGender() + "\","
        + "DOB =\"" + s.getDOB() + "\","
        + "Degree =\"" + s.getDegree() + "\" "
        + "WHERE ID =" + w;
    

    【讨论】:

    • 那么正确的语法是什么样的,因为如果我尝试放置空格和撇号,我会收到语法错误,例如 String query = "UPDATE Student SET ID = " + 'w' + " , " + "FirstName = " + 'a' + " , " + "LastName = " + 'b' + " , " + "地址 = " + 'c' + " , " + "性别 = " + 'd' + " , " + "DOB = " + 'f' + " , " + "度数 = " + 'g' + "WHERE ID = " + w;
    • 我现在收到以下错误,上面的代码 [ODBC Microsoft Access Driver] 查询表达式 'B.A" WHERE ID =4' 中字符串中的语法错误。是的 getter setter 是字符串类型跨度>
    • 好吧,暂时忘掉java吧。您希望对填充了所有值的数据库运行什么查询?
    • MS Access 文件中有一个现有的学生数据库,在搜索特定 ID 时,我会在 JFrame 的相关字段中显示学生的详细信息。如果我在这些字段中进行任何更改,我希望在 Access 数据库中更新这些更改,包括更改后的 ID
    • 到目前为止,插入数据和检索数据这两个操作都运行良好,只需要更新或替换表中的现有数据行(匹配 ID),如果更改了新数据
    猜你喜欢
    • 2021-11-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-06-06
    • 1970-01-01
    相关资源
    最近更新 更多