java - 如何更新 SQLite 数据库中的值?

标签 java sqlite jdbc

我正在尝试更新 SQLite 数据库中的特定行,但它似乎不起作用。这就是数据库的样子。

-----------------------
_id | user | coins
-----------------------
1   | me   | 20
-----------------------

这就是我的代码:

public static void updateUserWallet() throws SQLException {
        try {
            int coins;
            Class.forName("org.sqlite.JDBC");
            Connection connection = DriverManager.getConnection("jdbc:sqlite:Database.db");

            String query = "Select * from userSettings WHERE user = " + "'" + lastUser + "'";
            Statement statement = connection.createStatement();
            ResultSet result = statement.executeQuery(query);

            while (result.next()) {
                coins = result.getInt("coins");
                result.updateInt("coins", 10);
                result.updateRow();
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

    }

选择表和其他东西是有效的,但是我第二次执行这段代码时,它崩溃了:

result.updateInt("coins", 10);
result.updateRow();

出现此错误:

java.sql.SQLException: not implemented by SQLite JDBC driver

    at org.sqlite.jdbc4.JDBC4ResultSet.unused(JDBC4ResultSet.java:321)
    at org.sqlite.jdbc4.JDBC4ResultSet.updateInt(JDBC4ResultSet.java:452)
    at dysanix.advanced.kikbot.main.updateUserWallet(main.java:367)
    at dysanix.advanced.kikbot.main$1.cmdGameRoll(main.java:266)
    at dysanix.advanced.kikbot.main$1.run(main.java:142)
    at java.util.concurrent.Executors$RunnableAdapter.call(Unknown Source)
    at java.util.concurrent.FutureTask.runAndReset(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(Unknown Source)
    at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
    at java.lang.Thread.run(Unknown Source)

-----------------------
_id | user | coins
-----------------------
1   | me   | 20
-----------------------

我只想将“20”更新为“10”(或其他数字)。 我将如何正确地执行此操作?

最佳答案

错误消息告诉您 SQLite JDBC 驱动程序不支持可更新的结果集。 (该功能“未由 SQLite JDBC 驱动程序实现”。)因此,您需要使用 UPDATE 语句,如下所示:

String query = "UPDATE userSettings SET coins=? WHERE user=?";
PreparedStatement statement = connection.prepareStatement(query);
statement.setInt(1, 10);
statement.setString(2, lastUser);
statement.executeUpdate();

关于java - 如何更新 SQLite 数据库中的值?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36796376/

相关文章:

android - 带有 AsyncTask 和 SQLite 游标的 NullPointerException

java - 使用 Firebird 将日期转换为时间戳

java - 数据库迁移(Liquibase + Maven + Spring)

java - 使用 JavaCV 计算 Homography 的 CvPoint2D32f 到 cvMat 的列表

java - 动态规划求解给定和的子集

apache-spark - 使用 Spark JDBC 时 DataFrame 列的自定义数据类型

java - 确保结果集中的最小行数

java - 如何开始将 Apache solr 与 Java 结合使用并运行简单的查询而不会出错?

java - SQL语法错误

android - SQLiteDatabase.openDatabase(...) 与 getWritableDatabase