我们已经部署了节点,并使用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函数)读取列数据的任何其他方式
我希望输出为可读格式
答案 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上的示例