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

问题描述 投票:0回答:1

我们已经使用corda部署了节点并将事务从一个节点发布到另一个节点,并且同样存储在“NODE_TRANSACTIONS”表中的h2数据库中。 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函数读取列数据的任何其他方法

我希望输出是可读格式

database blob h2 data-extraction
1个回答
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上的示例

© www.soinside.com 2019 - 2024. All rights reserved.