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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了我们如何从h2数据库中提取blob数据类型列的数据?相关的知识,希望对你有一定的参考价值。

我们已经使用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函数读取列数据的任何其他方法

我希望输出是可读格式

答案

如果您在事务之后将状态数据以可读格式存储在数据库中,则状态必须实现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上的示例

以上是关于我们如何从h2数据库中提取blob数据类型列的数据?的主要内容,如果未能解决你的问题,请参考以下文章

H2 BLOB 数据类型大小

如何获取 blob 类型的数据以在 oracle 中插入?

如何使用 Java 将列的时间戳(6)数据类型值从​​数据库提取到 csv 或在控制台上显示?

如何使用 BCP 或 Sql Server Management Studio 从 Sql Server 中获取 BLOB 数据?

TSQL 将数据库 BLOB 提取到临时表中

如何使用 iBatis 从数据库中选择 BLOB 列