#database #blob #h2 #corda #data-extraction
#База данных #большой двоичный объект #h2 #corda #извлечение данных
Вопрос:
Мы развернули узлы и отправили транзакцию с одного узла на другой с помощью corda, и то же самое было сохранено в базе данных h2 в таблице «NODE_TRANSACTIONS». Столбец TRANSACTION_VALUE в таблице NODE_TRANSACTIONS имеет тип данных BLOB.
Пожалуйста, предложите, как извлечь данные из этого столбца в удобочитаемом формате
Мы пробовали извлекать данные с помощью resultset.getBinaryStream
java, но не уверены в поддерживаемом типе файла, в котором его нужно прочитать. Пробовал с типами файлов 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:
Если после транзакции данные состояния хранятся в базе данных в удобочитаемом формате, состояние должно реализовывать интерфейс 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