我们已经使用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上的示例