Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/redis/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
分类帐外数据存储在Corda中_Corda - Fatal编程技术网

分类帐外数据存储在Corda中

分类帐外数据存储在Corda中,corda,Corda,我只想存储分类账外数据并从一个节点进行查询 我查过了。为了在表中存储数据,我遵循了中给出的创建事务生成器的常规协议,但在记录事务时遇到了问题 可以使用FinalityFlow来记录交易,还是必须使用Service Hub中的recordTransactions功能来记录交易 记录分类账外数据的首选方式是什么 提前感谢您应该通过直接在流程中写入节点数据库来记录分类账外数据 Flow DB示例是执行此操作的CorDapp的一个示例。它创建一个数据库服务,该服务位于节点上,并读取和写入节点的数据库:

我只想存储分类账外数据并从一个节点进行查询 我查过了。为了在表中存储数据,我遵循了中给出的创建事务生成器的常规协议,但在记录事务时遇到了问题

可以使用FinalityFlow来记录交易,还是必须使用Service Hub中的recordTransactions功能来记录交易

记录分类账外数据的首选方式是什么


提前感谢

您应该通过直接在流程中写入节点数据库来记录分类账外数据

Flow DB示例是执行此操作的CorDapp的一个示例。它创建一个数据库服务,该服务位于节点上,并读取和写入节点的数据库:

@CordaService
open class DatabaseService(private val services: ServiceHub) : SingletonSerializeAsToken() {

    companion object {
        val log = loggerFor<DatabaseService>()
    }

    /**
     * Executes a database update.
     *
     * @param query The query string with blanks for the parameters.
     * @param params The parameters to fill the blanks in the query string.
     */
    protected fun executeUpdate(query: String, params: Map<Int, Any>) {
        val preparedStatement = prepareStatement(query, params)

        try {
            preparedStatement.executeUpdate()
        } catch (e: SQLException) {
            log.error(e.message)
            throw e
        } finally {
            preparedStatement.close()
        }
    }

    /**
     * Executes a database query.
     *
     * @param query The query string with blanks for the parameters.
     * @param params The parameters to fill the blanks in the query string.
     * @param transformer A function for processing the query's ResultSet.
     *
     * @return The list of transformed query results.
     */
    protected fun <T : Any> executeQuery(
            query: String,
            params: Map<Int, Any>,
            transformer: (ResultSet) -> T
    ): List<T> {
        val preparedStatement = prepareStatement(query, params)
        val results = mutableListOf<T>()

        return try {
            val resultSet = preparedStatement.executeQuery()
            while (resultSet.next()) {
                results.add(transformer(resultSet))
            }
            results
        } catch (e: SQLException) {
            log.error(e.message)
            throw e
        } finally {
            preparedStatement.close()
        }
    }

    /**
     * Creates a PreparedStatement - a precompiled SQL statement to be
     * executed against the database.
     *
     * @param query The query string with blanks for the parameters.
     * @param params The parameters to fill the blanks in the query string.
     *
     * @return The query string and params compiled into a PreparedStatement
     */
    private fun prepareStatement(query: String, params: Map<Int, Any>): PreparedStatement {
        val session = services.jdbcSession()
        val preparedStatement = session.prepareStatement(query)

        params.forEach { (key, value) ->
            when (value) {
                is String -> preparedStatement.setString(key, value)
                is Int -> preparedStatement.setInt(key, value)
                is Long -> preparedStatement.setLong(key, value)
                else -> throw IllegalArgumentException("Unsupported type.")
            }
        }

        return preparedStatement
    }
}

检查下面的示例


在这里,您可以通过向发出PUT请求将令牌添加到节点的数据库表中:

如果您希望将其真正从其他数据库中而不是节点数据库中的额外表中注销,该怎么办?