我不断使用逐部分构建的 sql 请求获取 SQLError

我有一个 JavaFX 应用程序,用户在其中输入一些关于他的信息,然后我有一个名为的类,DbUpdateBuilder它允许我更轻松地创建我的 sql resquest。然后我用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; 

我必须确定工作示例中硬编码的请求来自非工作示例中打印的请求的复制和粘贴


米琪卡哇伊
浏览 125回答 3
3回答

四季花海

只是建议 LIKE 对字符串起作用,通常与 wild char 一起使用如果您需要完全匹配,那么可能是您需要的,然后使用 equalUPDATE `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%'

慕田峪7331174

但我自己发现了问题:我比较了两个字符串(一个硬编码的字符串和一个由我的构建器生成的字符串)它们具有相同的长度,所以我逐个字符地打印每个字符串,然后我发现了问题!一些字符等于 null 所以 SQL 不喜欢它并产生错误但是当我打印它时 null 字符被忽略了......

智慧大石

有时引号 ' 不被 mysql 接受,但你可以尝试这个简单的没有 qoutes  UPDATE users      SET first_name=null,       last_name=null,       age=null,       role=null,       gender='3'   WHERE id LIKE '%10%'并确保您的数据类型正确, null 也等于空,您可以尝试将其更改为 '' like first_name=''
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java