【问题标题】:Creating Tables in Node Database hosted in R3 Corda在 R3 Corda 中托管的节点数据库中创建表
【发布时间】:2018-10-11 16:17:14
【问题描述】:

在我们编写的 Cordapps 中,如何在现有节点数据库中创建新表?

是否应该写在api文件中?

如何建立与节点数据库的连接并使用它来检索数据而不获取 shell 中生成的 JDBC 连接字符串?

【问题讨论】:

    标签: corda


    【解决方案1】:

    你有两个选择:

    手动创建表格:

    首先,您需要连接到节点的数据库。假设您正在使用节点的内置 H2 数据库,并且您希望在端口 10008 上连接到您的节点。

    在Corda 3中,可以在Cordform任务中设置节点的H2端口:

    task deployNodes(type: net.corda.plugins.Cordform, dependsOn: ['jar']) {
        directory "./build/nodes"
        ...
        node {
            name "O=MyNode,L=London,C=GB"
            ...
            h2Port 10008
        }
        ...
    }
    

    或者直接在节点的node.conf文件中:

    h2port=10008
    

    如果节点在本地运行,则使用最新的稳定版H2 client 使用地址连接到节点:

    jdbc:h2:tcp://localhost:10008/node
    

    在节点启动时自动创建表:

    节点可以托管在节点启动时初始化并在节点上持续运行的服务。我们可以编写一个在启动时创建数据库表的服务,如下所示:

    private val TABLE_NAME = "crypto_values"
    
    @CordaService
    class DatabaseService(private val services: ServiceHub) : SingletonSerializeAsToken() {
        companion object {
            val log = loggerFor<DatabaseService>()
        }
    
        /**
         * Initialises a database table on the node with name TABlE_NAME.
         */
        init {
            val query = """
                create table if not exists $TABLE_NAME(
                    token varchar(64),
                    value int
                )"""
    
            val session = services.jdbcSession()
            val preparedStatement = session.prepareStatement(query)
    
            try {
                preparedStatement.executeUpdate()
            } catch (e: SQLException) {
                log.error(e.message)
                throw e
            } finally {
                preparedStatement.close()
            }
    
            log.info("Created $TABLE_NAME table.")
        }
    }
    

    【讨论】:

    • 我应该在哪个文件中编写服务?
    猜你喜欢
    • 1970-01-01
    • 2020-03-01
    • 1970-01-01
    • 2018-10-01
    • 1970-01-01
    • 1970-01-01
    • 2018-08-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多