java mysql executeupdate sqlsyntaxerrorexception异常

osh3o9ms  于 2021-06-20  发布在  Mysql
关注(0)|答案(1)|浏览(349)

这个问题在这里已经有答案了

在mysql中何时使用单引号、双引号和反引号(13个答案)
两年前关门了。
我刚开始在java中使用mysql,我正在尝试更新数据库中的现有数据。主要目的是创建一个计数器,当一个操作完成后,数据库中会有一个int更新。
在本例中,我试图通过在代码编译时增加整数来更新每日搜索计数。下面您可以看到我的数据库数据的图片:数据库中的数据我写的代码是为了增加“每日搜索计数”由1每次代码运行。但不幸的是,我得到了以下错误:

Exception in thread "main" java.sql.SQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near ''accounts' set 'daily_search_count' = '4' where 'id' = '1'' at line 1
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:118)
at com.mysql.cj.jdbc.exceptions.SQLError.createSQLException(SQLError.java:95)
at com.mysql.cj.jdbc.exceptions.SQLExceptionsMapping.translateException(SQLExceptionsMapping.java:122)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeInternal(ClientPreparedStatement.java:960)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1116)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdateInternal(ClientPreparedStatement.java:1066)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeLargeUpdate(ClientPreparedStatement.java:1396)
at com.mysql.cj.jdbc.ClientPreparedStatement.executeUpdate(ClientPreparedStatement.java:1051)
at Database.main(Database.java:29)

我看不出我的代码有什么问题,如下所示:

import java.sql.*;

public class Database {

public static void main(String[] args) throws Exception {
    String host = "jdbc:mysql://localhost:3306/presearch";
    String username = "root";
    String password = "";
    String query = "select * from accounts";

    Connection con = DriverManager.getConnection(host, username, password);

    Statement st = con.createStatement();
    ResultSet rs = st.executeQuery(query);

    String userData = "";

    while (rs.next()) {
        if (rs.getInt(4) < 33) {
            userData = rs.getInt(1) + " : " + rs.getString(2) + " daily search count : " + rs.getInt(4);
            System.out.println(userData);

            int counter = rs.getInt(4) + 1;
            PreparedStatement updatexdd = con.prepareStatement("update 'accounts' set 'daily_search_count' = '" + counter + "' where 'id' = '" + rs.getInt(1) + "'");
            int updatexdd_done = updatexdd.executeUpdate();
        }
    }

    st.close();
    con.close();

}

}

我希望有人能看出我做错了什么。
提前谢谢!

jc3wubiy

jc3wubiy1#

您的代码中存在一些必须避免的问题:
表和列的名称不应位于两个引号之间 'accounts' 确保使用占位符( ? )在带有preparedstatement的查询中指定属性
请确保在finally块中关闭连接和语句
我还注意到,您所需要的只是一个查询
您的代码应该如下所示:

public static void main(String[] args) throws Exception {
    String host = "jdbc:mysql://localhost:3306/presearch";
    String username = "root";
    String password = "";
    String query = "update accounts set daily_search_count = daily_search_count + 1 where daily_search_count < 33";
    try (Connection con = DriverManager.getConnection(host, username, password);
            PreparedStatement updatexdd = con.prepareStatement(query)) {

        int updatexdd_done = updatexdd.executeUpdate();
    }
}

在我的代码中,我使用try with resources语句 AutoCloseable 以及 Closeable 接口,这意味着您不需要关闭连接或语句。

相关问题