3

我有一个应用程序可以读取和写入数据到 sqlite 数据库。在某些情况下,我必须写入一些数据,并在数据库中读取这些数据。请参见下面的示例。

    public void read() throws SQLException {
    Connection c = DriverManager.getConnection("jdbc:sqlite:C:\\test.sqlite");
    c.setAutoCommit(false);
    try {
        PreparedStatement p = c.prepareStatement("SELECT * FROM test");
        try {
            ResultSet rs = p.executeQuery();
            try {
                while (rs.next()) {
                    System.out.println(rs.getInt("val"));
                }
            } finally {
                rs.close();
            }
        } finally {
            p.close();
        }
    } finally {
        c.close();
    }
}

public void write() throws SQLException {
    Connection c = DriverManager.getConnection("jdbc:sqlite:C:\\test.sqlite");
    c.setAutoCommit(false);
    try {
        PreparedStatement p = c.prepareStatement("INSERT INTO test (val) VALUES (?)");
        try {
            p.setDouble(1, Math.random());
            p.executeUpdate();
            c.commit();
        } finally {
            p.close();
        }

    } finally {
        c.close();
    }
}

public void demonstrate() {
    write();
    read();
}

如果我调用该demonstrate方法,数据会毫无例外地写入,但读取方法不会在标准输出上输出任何内容。如果我重新启动应用程序,我可以看到上次运行中写入的数据。上面显示的示例已简化。在实际应用程序中,每个查询要写入更多数据。

那么为什么 SQLite 看不到当前会话中写入的数据呢?

4

1 回答 1

3

我注意到您正在使用驱动程序管理器来获取 SQLConnection。您可能忘记在驱动程序管理器中注册 SQL 驱动程序。你的代码中应该有这样的东西(你只需要做一次):

  DriverManager.registerDriver(new org.sqlite.JDBC());

编辑:

您的代码中有一个小错误:您正在编写双精度数并读取整数。为了测试,我创建了一个表“test”,其中包含 double 类型的列“val”。

每次我运行程序时,都会在输出中写入一个新行:

0
0
0

这是程序运行 3 次后的输出。数据库有 3 行,每次我运行程序时都会添加一个(0 值是因为您正在从双精度值读取整数,并且随机返回一个介于 0 和 1 之间的值)。

我唯一的解释可能是您的 SQLite 驱动程序中的错误。

在此处查看我的答案以获取驱动程序更新

于 2012-07-06T12:40:26.503 回答