java - '? 附近更新查询中的语法错误在 Eclipse 中但在 MySQL Workbench 中工作

标签 java mysql sql-update

我在 Eclipse 中遇到此错误

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '? , login = ? , pwd = ? WHERE login = 'pp'' at line 1

这是我在源代码中的查询:

String query2 = "UPDATE usuarios SET nombre = ? , login = ? , pwd = ? WHERE login = '" + login2 + "'";

这是我的方法的完整代码:

private void modificar() {
        // Prints the content of the table
        String query = "SELECT * FROM usuarios";
        try {
            pst = con.Conectar().prepareStatement(query);
            rs = pst.executeQuery(query);

            // Itarate over the registries
            int i = 0;
            while (rs.next()) {
                i++;
                //print them
                System.out.println(i + "  " + rs.getString("id") + " " + rs.getString("login"));
            }
            //There are X registries
            System.out.println("Existen " + i + " usuarios actualmente");
            pst.close();

            //Which registry do you need to modify?
            System.out.println("Ingrese el login del usuarios a modificar");
            String login2 = scanner.nextLine();

            System.out.println("Ingrese datos a modificar");
            System.out.print("Nombre: ");
            nombre = scanner.nextLine();
            System.out.print("Login: ");
            login = scanner.nextLine();
            System.out.print("Password: ");
            pwd = scanner.nextLine();

            String query2 = "UPDATE usuarios SET nombre = ? , login = ? , pwd = ? WHERE login = '" + login2 + "'";

            pst = con.Conectar().prepareStatement(query2);
            pst.setString(1, nombre);
            pst.setString(2, login);
            pst.setString(3, pwd);
            /*
             * Aqui da error de sintaxis en query2
             */
            pst.executeUpdate(query2);
            pst.close();

            String query3 = "SELECT * FROM usuarios where login =" + login;

            pst = con.Conectar().prepareStatement(query3);
            rs = pst.executeQuery(query3);
            rs.next();

            System.out.println("ahora quedo asi " + rs.getString("login"));

        } catch (SQLException e) {
            // TODO: handle exception
            e.printStackTrace();
        } finally {
            cerrarConsultas();
        }
    }

但是当我在 MySQL Workbench 中使用它时工作正常,这是我在工作台中的测试。

prepare insertar from "UPDATE usuarios SET nombre = ?, login = ?, pwd = ? WHERE login = 'pp'"; 
-- "UPDATE usuarios SET nombre = ?, login = ?, pwd = ? WHERE login = 'pablo'";
set @nombre = 'pp';
set @login = 'pp';
set @pwd = 'pp';
execute insertar using @nombre, @login, @pwd;
deallocate prepare insertar;

我已经尝试过使用文字引号,但仍然不起作用。

String query2 = "UPDATE usuarios SET `nombre` = ? , `login` = ? , `pwd` = ? WHERE login = '" + login2 + "'";

还尝试过:

String query2 = "UPDATE usuarios SET `nombre` = ? , `login` = ? , `pwd` = ? WHERE login = "+ login2;

相同的结果。

最佳答案

替换 pst.executeUpdate(query2);pst.executeUpdate();

否则,您最终将忽略使用各种 pst.setString(...) 进行的参数绑定(bind),因此数据库引擎将收到带有 ? 的查询而不是您想要绑定(bind)的值。

关于java - '? 附近更新查询中的语法错误在 Eclipse 中但在 MySQL Workbench 中工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46040116/

相关文章:

mysql - mysql一条语句同时更新两张表

java - Java 中的 MSXML 解析器

Java 日期时间 一天的开始和结束,没有任何时区信息

php - 使用 PHP/MySQL 的注册页面不将用户值存储到数据库

mysql - 尽管建立了索引,但使用多个表连接进行查询仍花费太多时间

postgresql - 使用通配符更新多行

mysql - 使用可变数量的其他字段更新 mySQL 字段

java - EntityManagerFactory 中未指定 PersistenceProvider,并且选择的 PersistenceUnitInfo 未指定基于注释的配置

java - 构造函数从未被使用过

mysql - 如何在 MySQL 上创建有效的索引