从特定节点的数据库查询数据

querying data from particular node's database

我正在使用客户查询做一些报告类的事情。为此,我必须从各个节点的 database.but 获取数据,不知道如何做 that.its 通常获取所有数据而不管节点。

我们来做一个基于IOU CorDapp (https://github.com/corda/cordapp-example/)的例子。您可以通过多种方式执行此操作:

1.通过 API 端点

此端点将 return 存储在节点上且值高于 minValue:

的任何 IOU
@GET
@Path("ious-above-value")
@Produces(MediaType.APPLICATION_JSON)
fun getIOUsAboveValue(@QueryParam("minValue") minValue: Int): List<IOUState> {
    val results = builder {
        val currencyIndex = IOUSchemaV1.PersistentIOU::value.greaterThan(minValue)
        val customCriteria = QueryCriteria.VaultCustomQueryCriteria(currencyIndex)
        rpcOps.vaultQueryBy<IOUState>(customCriteria)
    }

    val stateAndRefs = results.states
    return stateAndRefs.map { stateAndRef -> stateAndRef.state.data }
}

2。通过客户端

此客户端将 return 存储在节点上且值高于 minValue:

的任何 IOU
fun main(args: Array<String>) {
    require(args.size == 1) { "Usage: ExampleClientRPC <node address>" }
    val nodeAddress = NetworkHostAndPort.parse(args[0])
    val client = CordaRPCClient(nodeAddress)

    // Can be amended in the com.example.MainKt file.
    val proxy = client.start("user1", "test").proxy

    val results = builder {
        val currencyIndex = IOUSchemaV1.PersistentIOU::value.greaterThan(3)
        val customCriteria = QueryCriteria.VaultCustomQueryCriteria(currencyIndex)
        proxy.vaultQueryBy<IOUState>(customCriteria)
    }

    val stateAndRefs = results.states
    val states = stateAndRefs.map { stateAndRef -> stateAndRef.state.data }
}

3。直接通过节点的数据库

您可以按照此处的说明登录到节点的数据库:https://docs.corda.net/node-database.html。然后,您将能够直接对节点的数据库执行 SQL 查询。