禁用TEXT表的缓存

时间:2017-05-06 16:26:31

标签: hsqldb

我正在尝试在HsqlDB 2.3.4中为TEXT表禁用缓存,以便针对CSV文件的查询返回最新值而不是来自hsqdb内存的缓存值。

设置cache_rows=0会引发IllegalArgumentException,并将其设置为1似乎无效。 cached_rows设置可能会重置为默认值(10000行)或最小值(100行)。

如果不支持禁用缓存,是否可以在运行查询之前删除给定的表缓存甚至数据库缓存?似乎支持关闭数据库或删除整个架构,但这不是我想要实现的解决方法。

编辑1.示例代码

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

    String dir = args[0];
    Class.forName("org.hsqldb.jdbc.JDBCDriver");
    Connection conn = DriverManager.getConnection("jdbc:hsqldb:file:" + dir + "");

    {
        Statement st = conn.createStatement();
        st.execute("DROP TABLE books IF EXISTS");
        st.close();
    }
    {
        Statement st = conn.createStatement();
        st.execute("CREATE TEXT TABLE books (Title varchar(64), Author varchar(64))");
        st.close();
    }
    {
        Statement st = conn.createStatement();
        st.execute("SET TABLE books SOURCE \"books.csv;ignore_first=true;cache_rows=1\"");
        st.close();
    }

    for (int x = 0; x < 3; x++) {
        System.out.println("iteration: " + x);

            Statement st = conn.createStatement();
            ResultSet rs = st.executeQuery("SELECT * FROM books");
            while (rs.next()) {
                System.out.println(rs.getString(1) + " : " + rs.getString(2));
            }
            st.close();
            Thread.sleep(15000L);
            //data from files is cached, results shows original rows
            //even after the file was modified on the file system

        //need to execute source off/on to reload the data from files

    }

    conn.close();

}

1 个答案:

答案 0 :(得分:1)

缓存用于提高查询速度,与修改后的数据无关。

您想要查询由外部程序生成的CSV文件。

以只读方式连接到该文件。如果要获取文件的更新版本,请使用此文件重新加载数据

SET TABLE XXX SOURCE OFF
SET TABLE XXX SOURCE ON