我们如何从H2数据库中提取Blob数据类型列的数据?

时间:2019-04-10 06:01:41

标签: database blob h2 corda data-extraction

我们已经部署了节点,并使用corda将一个事务从一个节点发布到另一个节点,并且该事务存储在h2数据库的“ NODE_TRANSACTIONS”表中。 NODE_TRANSACTIONS表中的TRANSACTION_VALUE列为BLOB数据类型。

请建议如何从该列中以可读格式提取数据

我们尝试在Java中使用resultset.getBinaryStream提取数据,但不确定需要在其中读取其支持的文件类型。尝试使用image / txt / pdf等文件类型,但没有文件具有可读格式。

static String url = "jdbc:h2:tcp://localhost:12345/node";
    static String username = "sa";
    static String password = "";
        Class.forName("oracle.h2.Driver");
        Connection conn = DriverManager.getConnection(url, username, password);
        System.out.println("getting connection: " + conn);
String sql = "SELECT TX_ID, TRANSACTION_VALUE FROM NODE_TRANSACTIONS where rownum<2";
PreparedStatement stmt = conn.prepareStatement(sql);
        ResultSet rs = stmt.executeQuery();
while (rs.next()) {
            InputStream data=rs.getBinaryStream(2);
            File file = new File("D:\\blob.txt");
            FileOutputStream fos = new FileOutputStream(file);
            byte[] buffer = new byte[1];
            while (data.read(buffer) > 0) {
                fos.write(buffer);
            }
            fos.close();
        }
        conn.close();

另外,请提出使用h2数据库函数(或oracle函数)读取列数据的任何其他方式

我希望输出为可读格式

1 个答案:

答案 0 :(得分:0)

如果在事务之后将状态数据以可读格式存储在数据库中,则状态必须实现QueryableState接口。

请参阅https://docs.corda.net/api-persistence.html上的文档和https://github.com/corda/cordapp-example/blob/release-V4/java-source/src/main/java/com/example/state/IOUState.java上的示例