Как я могу запросить хранилище Corda для состояний, которые содержат атрибут Date в пределах определенного диапазона дат? - PullRequest
0 голосов
/ 22 октября 2019

У меня есть состояния Corda, которые используют атрибут java.util.Date. Я хотел бы иметь возможность выполнить запрос хранилища для получения атрибута Date, который находится в определенном диапазоне дат.

1 Ответ

0 голосов
/ 22 октября 2019

Вы можете выполнить SQL-запрос, используя serviceHub.jdbcSession(). Ниже приведен пример потока, который использует его и возвращает список дат в заданном диапазоне. DATE_STATE - это таблица базы данных, созданная MappedSchema, которая определена специально для состояния, к которому я пытаюсь выполнить запрос. Информацию о создании MappedSchema для государства можно найти здесь: https://docs.corda.net/api-persistence.html

@StartableByRPC
class QueryDateRangeFlow(val date1: Date, val date2: Date) : FlowLogic<List<Date>>() {

    @Suspendable
    override fun call(): List<Date> {
        val connection = serviceHub.jdbcSession()
        val queryString = "SELECT \"DATE\" FROM PUBLIC.DATE_STATE WHERE DATE BETWEEN ? AND ?;"

        val prepStatement = connection.prepareStatement(queryString)
        prepStatement.setObject(1, date1)
        prepStatement.setObject(2, date2)

        val rs = prepStatement.executeQuery()
        val list = mutableListOf<Date>()
        while (rs.next()) {
            list.add(rs.getObject("DATE", java.util.Date::class.java))
        }
        return list.toList()
    }
}
...