JAVA JDBC mySql Prepared statement 更新查询 [重复]

Posted

技术标签:

【中文标题】JAVA JDBC mySql Prepared statement 更新查询 [重复]【英文标题】:JAVA JDBC mySql Prepared statement Update query [duplicate] 【发布时间】:2019-02-07 23:27:46 【问题描述】:

我正在尝试执行以下代码

package jdbclesson;

import java.sql.*;

public class PreparedQuery 

public static void main(String[] args) throws Exception

    String url              = "jdbc:mysql://localhost:3306/alien?useSSL=false";
    String uname            = "root";
    String pass             = "ma123";
    String query            = "UPDATE student SET username= ? where userid= ? ";
    PreparedStatement stmt  = null;


    Class.forName("com.mysql.jdbc.Driver");
    Connection con = DriverManager.getConnection(url, uname, pass);
    stmt = con.prepareStatement(query);

    stmt.setString(1, "tina");
    stmt.setInt(2, 6);


    int rs = stmt.executeUpdate(query);

    System.out.println(rs);
    stmt.close();
    con.close();




但出现以下错误

线程“main”中的异常 com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: 你有一个 SQL 语法错误;检查与您对应的手册 MySQL 服务器版本,以便在 '? 附近使用正确的语法在哪里 用户 ID=?在第 1 行

我的数据库只有 1 个表 student 有 2 列用户 ID 和用户名以及 10 行我缺少什么

【问题讨论】:

用户 id 是主键还是有设置为自动递增的列 去掉 ? 之间的空格和双引号 (") userid= ? "; 请再试一次。 【参考方案1】:

试试:

int rs = stmt.executeUpdate();

代替:

int rs = stmt.executeUpdate(query);

executeUpdate() 运行准备好的语句的查询,这是您想要的。 executeUpdate(query) 运行传递给该方法的查询。您收到错误是因为您传递了带有错误的 SQL(包含?)。

【讨论】:

【参考方案2】:

请尝试:

"UPDATE student SET username= ? ” + ” where userid= ?"; 

int rs=stmt.executeUpdate();

【讨论】:

这两行代码不是已经出现在问题中了吗?

以上是关于JAVA JDBC mySql Prepared statement 更新查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

jdbc为啥prepared statement不支持命名参数?

哪种方法在性能方面更好? (关于JDBC中prepared statement中可变参数标记的使用)

错误:[Pivotal][Greenplum JDBC Driver][Greenplum]prepared statement "PS1" 已经存在

未找到 Java Prepared statement 错误表

Prepared Statement 中的绑定不适用于 Microsoft SQL Server JDBC 驱动程序 sqljdbc4.jar

JDBC中?占位符的使用说明