我一直使用部分建立的sql请求获取SQLError

时间:2019-08-15 13:54:35

标签: java mysql

我有一个JavaFX App,用户可以在其中输入有关他的一些信息,然后有一个名为DbUpdateBuilder的类,该类使我可以更轻松地创建sql请求。然后我用statement.executeUpdate(request)

问题是我总是会收到此错误: java.sql.SQLSyntaxErrorException: syntax error near " line 1所以我认为我的请求有误,所以我打印了我得到的请求:

UPDATE `users` SET `users`.`first_name`=null,`users`.`last_name`=null,`users`.`age`=null,`users`.`role`=null,`users`.`gender`= 3  WHERE `users`.`id` LIKE 10

如果我对其进行硬编码,则可以使用。

这不起作用

            // Some code
            Statement stmt = con.createStatement();
            String request = builder.getRequest();
            System.out.println(request); // where the request in the 
                                         // working exemple comes from

            if(stmt.executeUpdate(request) > 0) { // I get the error from this 
                                                  // line
                return UPDATE_SUCCESS;
            }
            return SQL_ERROR_OCCURED; 

但这确实有用

            Statement stmt = con.createStatement();
            String request = builder.getRequest();
            System.out.println(request);
            if(stmt.executeUpdate("UPDATE `users` SET `users`.`first_name`=null,`users`.`last_name`=null,`users`.`age`=null,`users`.`role`=null,`users`.`gender`= 3  WHERE `users`.`id` LIKE 10") > 0) {
                return UPDATE_SUCCESS;
            }
            return SQL_ERROR_OCCURED; 

我必须确保在工作示例中进行硬编码的请求来自复制并粘贴在不工作示例中打印的请求

3 个答案:

答案 0 :(得分:0)

只是一个建议 像字符串一样工作,通常与通配符一起使用

可能需要
如果您需要完全匹配,请使用

UPDATE `users` 
SET `users`.`first_name`=null,
    `users`.`last_name`=null,
    `users`.`age`=null,
    `users`.`role`=null,
    `users`.`gender`= 3  
WHERE `users`.`id` = 10

如果需要模式匹配,请使用like和wildchar例如;

UPDATE `users` 
SET `users`.`first_name`=null,
    `users`.`last_name`=null,
    `users`.`age`=null,
    `users`.`role`=null,
    `users`.`gender`= 3  
WHERE `users`.`id` LIKE '%10%'

答案 1 :(得分:0)

感谢您的建议@scaisEdge。但是我自己发现了问题:我比较了两个字符串(一个是硬编码的字符串,另一个是由我的构建器生成的字符串),它们的长度相同,因此我逐个字符打印一个字符,然后发现了问题!一些字符等于null,因此SQL不喜欢它并生成错误,但是当我打印它时,忽略了null字符...

答案 2 :(得分:0)

有时候,引号'不能被mysql接受,但是您可以在没有qoutes的情况下尝试简单

  UPDATE users 
     SET first_name=null,
       last_name=null,
       age=null,
       role=null,
       gender='3' 
  WHERE id LIKE '%10%'

并确保您的数据类型正确,null等于空,您可以尝试将其更改为”,例如first_name =”