暂无图片
暂无图片
1
暂无图片
暂无图片
暂无图片

GoldenDB分布式数据库:应用开发示例

李奇 2026-02-26
475

开发支持

本章主要介绍应用开发示例、应用开发设计、连接数据库方式、创建和管理数据库对象、数据写入、数据查询、分布式事务特性、 SQL 性能调优、 SQL 实践和建议等。

应用开发示例

本节提供不同编程语言连接到 GoldenDB 代码示例。


Java 语言连接示例

GoldenDB 驱动完全实现 JDBC 标准接口,可以按照 JDBC 标准接口连接数据库。以下所有示例代码,都需要依赖 GoldenDB 自研驱动,需要将驱动包引入到代码依赖中。

JDBC 直接连接

  • 环境配置
    推荐 JDK1.8 。
    GoldenDB 自研驱动。

  • 示例代码

    public static void main(String[] args) {
            String url = "jdbc:goldendb://host:port/test";
            String pass = "****";
            String username = "****";
            String sql = "insert into good (id, name) values (1, 'name')";
            Connection connection = null;
            Statement st = null;
            try {
                connection = DriverManager.getConnection(url, username, pass);
                st = connection.createStatement();
                st.execute(sql);
            } catch (SQLException e) {
                if(st != null){
                    try {
                        st.close();
                    } catch (SQLException ex) {
                        throw new RuntimeException(ex);
                    }
                }
                if(connection != null){
                    try {
                        connection.close();
                    } catch (SQLException ex) {
                        throw new RuntimeException(ex);
                    }
                }
                throw new RuntimeException(e);
            }
        }

    核心参数说明

    字段

    描述

    url

    连接字符串,采用标准 JDBC 连接串写法。

    pass

    数据库密码。

    username

    数据库用户名。

    sql

    需要执行的 SQL。

Mybatis 框架连接

  • 环境配置
    JDK1.8 。
    maven3.6 以上。
    GoldenDB 驱动。

  • 示例代码

    pom.xml

    使用 maven 来管理项目,其中 pom.xml 中引入框架依赖, pom.xml 文件示例如下:

    <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
      <modelVersion>4.0.0</modelVersion>
      <groupId>com.test</groupId>
      <artifactId>mybatis_single3_5_0</artifactId>
      <version>1.0-SNAPSHOT</version>
      <packaging>jar</packaging>
      <name>mybatis_single3_5_0</name>
      <url>http://maven.apache.org</url>
      <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
      </properties>
      <dependencies>
        <dependency>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
          <version>3.8.1</version>
          <scope>test</scope>
        </dependency>
        <!-- https://mvnrepository.com/artifact/org.mybatis/mybatis -->
        <dependency>
          <groupId>org.mybatis</groupId>
          <artifactId>mybatis</artifactId>
          <version>3.5.0</version>
        </dependency>
      </dependencies>
    </project>

    mybatis-config.xml

    mybatis 配置连接相关参数, mybatis-config.xml 文件示例如下:

    <?xml version="1.0" encoding="UTF-8" ?>
    <!DOCTYPE configuration
            PUBLIC "-//mybatis.org//DTD Config 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-config.dtd">
    <configuration>
        <environments default="development">
            <environment id="development">
                <!-- JDBC transaction manager -->
                <transactionManager type="JDBC"/>
                <!-- Database pool -->
                <dataSource type="POOLED">
                    <property name="driver" value="com.goldendb.jdbc.Driver"/>
                    <property name="url" value="jdbc:goldendb://host:port/test"/>
                    <property name="username" value="****"/>
                    <property name="password" value="****"/>
                </dataSource>
            </environment>
        </environments>
        <mappers>
            <mapper resource="GoodMapper.xml"/>
        </mappers>
    </configuration>

    核心参数说明

    参数

    描述

    driver

    驱动完整类名。

    url

    连接字符串,采用标准 JDBC 连接串写法。

    pass

    数据库密码。

    resource

    mapper 文件地址, 文中示例 GoodMapper.xml 在 resources 目录下。

    GoodMapper.xml

    MyBatis 中, Mapper 是一个用于将 SQL 操作与 Java 对象进行映射的接口或 XML 文件, GoodMapper.xml 具体写法如下:

    <?xml version="1.0" encoding="UTF8" ?>
    <!DOCTYPE mapper
            PUBLIC "-//mybatis.org//DTD Mapper 3.0//EN"
            "http://mybatis.org/dtd/mybatis-3-mapper.dtd">
    <mapper namespace="com.test.GoodMapper">
        <select id="listUser" resultType="com.test.Good">
            select * from user;
        </select>
    </mapper>

    核心参数说明

    参数

    描述

    namespace

    mapper 文件命名空间。

    id

    namespace + id 需要全局唯一。

Hibernate 框架连接

  • 环境配置
    JDK1.8 。
    maven3.6 以上。
    GoldenDB 驱动。

  • 示例代码

    pom.xml

    使用 maven 来管理项目,其中 pom.xml 中引入框架依赖, pom.xml 文件示例如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <groupId>org.example</groupId>
        <artifactId>x</artifactId>
        <version>1.0-SNAPSHOT</version>
        <properties>
            <maven.compiler.source>8</maven.compiler.source>
            <maven.compiler.target>8</maven.compiler.target>
            <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        </properties>
        <dependencies>
            <dependency>
                <groupId>org.hibernate</groupId>
                <artifactId>hibernate-core</artifactId>
                <version>3.6.10.Final</version>
            </dependency>
            <dependency>
                <groupId>javassist</groupId>
                <artifactId>javassist</artifactId>
                <version>3.12.1.GA</version>
            </dependency>
        </dependencies>
    </project>

    hibernate.cfg.xml

    hibernate 配置连接相关参数如下, hibernate.cfg.xml 文件示例如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-configuration PUBLIC
            "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
            "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
    <hibernate-configuration>
        <session-factory>
            <property name="hibernate.connection.driver_class">
                com.goldendb.jdbc.Driver
            </property>
              <property name="hibernate.connection.password">
                  ****
              </property>
            <property name="hibernate.connection.url">
                jdbc:goldendb://host:port/test
            </property>
            <property name="hibernate.connection.username">
                ****
            </property>
            <mapping resource="Good.hbm.xml"/>
        </session-factory>
    </hibernate-configuration>

    核心参数说明

    参数

    描述

    driver_class

    驱动完整类名。

    url

    连接字符串,采用标准 JDBC 连接串写法。

    password

    数据库密码。

    username

    数据库用户名。

    resource

    hibernate 对象关系映射文件地址,文中示例 Good.hbm.xml 在 resources 目录下。

    Good.hbm.xml

    hibernate 中映射配置文件, Good.hbm.xml 文件示例如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
            "http://hibernate.sourceforge.net/hibernate-mapping-3.0.dtd">
    <hibernate-mapping>
        <class name="org.example.entity.Good" table="good2">
            <id name="id" type="java.lang.Integer">
                <column name="id" not-null="true" sql-type="NUMBER"/>
                <generator class="native"/>
            </id>
            <property name="name" type="java.lang.String">
                <column name="name" />
            </property>
            <property name="price" type="java.lang.Double">
                <column name="price" />
            </property>
            <property name="create_time" type="java.lang.String">
                <column name="create_time" />
            </property>
        </class>
    </hibernate-mapping>

    核心参数说明

    参数

    描述

    class 标签中 name

    完整 POJO 类的类型。

    class 标签中 table

    数据库表名称。

Spring Boot 框架连接

  • 环境配置
    JDK1.8 。
    maven3.6 以上。
    GoldenDB 驱动。

  • 示例代码

    pom.xml

    使用 maven 来管理项目,其中 pom.xml 中引入框架依赖, pom.xml 文件示例如下:

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>
        <parent>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-parent</artifactId>
            <version>2.6.0</version>
            <relativePath/> <!-- lookup parent from repository -->
        </parent>
        <groupId>org.example</groupId>
        <artifactId>boot</artifactId>
        <version>1.0-SNAPSHOT</version>
        <packaging>jar</packaging>
        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-web</artifactId>
                <exclusions>
                    <exclusion>
                        <artifactId>spring-boot-starter-json</artifactId>
                        <groupId>org.springframework.boot</groupId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
        </dependencies>
    </project>

    application.yml

    Spring Boot 配置连接相关参数, application.yml 文件示例如下:

    spring:
      datasource:
          driver-class-name: com.goldendb.jdbc.Driver
          url: jdbc:goldendb://host:port/test
          username: ******
          password: ******

    核心参数说明

    参数

    描述

    driver-class-name

    驱动完整类名。

    url

    连接字符串,采用标准 JDBC 连接串写法。

    pass

    数据库密码。

    username

    数据库用户名。


C++ 语言连接示例

ODBC(Open-DataBase-Connectivity) 是最早由微软提出的开放式数据库互连技术,其基本思想是为用户提供简单、标准、透明的数据库连接的公共编程接口,搭配不同的驱动程序,用户使用同一套应用程序就可以访问不同的数据库。

  • 环境配置
    GoldenDB 定制 ODBC 驱动。
    硬件平台: x86_64/aarch64 。
    操作系统: x86_64 架构下: CentOS/Redhat 系 Linux 发行版 7 系列, suse12 ,海光麒麟。

  • 示例代码

    #include<sql.h>
    #include<sqlext.h> 
    #include<string.h>
    #include<time.h>
    #include<stdlib.h>
    #include<stdio.h>  
    
    #define isSuc(result) ((result) == SQL_SUCCESS || (result) == SQL_SUCCESS_WITH_INFO)
    
    /** 可扩展设置 **/
    char szConnectString[2560] ="DRIVER={/usr/lib64/libmyodbc5a.so};USER=xxx;PASSWORD=xxx;DATABASE=xx;PORT=8880;SERVER=10.10.10.10;SAFE=1;";
    char szSQLDrop[256] = "drop table if exists t1;";
    char szSQLCreate[256] = "CREATE TABLE t1(id int NOT NULL primary key,name char(50) NOT NULL,age int NOT NULL)distributed by hash(id)(g1)";
    /** 输出缓存 **/
    char szDriverOutput[256];
    short sDriverOutputLength;
    
    /** 用于测试的函数 **/
    int main()
    {
      short sret; //返回代码
      void* henv;  //环境句柄
      void* hdbc;  //连接句柄
      long mode;//提交模式
      void* hsmt; //语句句柄
    
      /** 申请环境句柄 **/
      sret = SQLAllocHandle(SQL_HANDLE_ENV,SQL_NULL_HANDLE,&henv);
      if(!isSuc(sret)){printf("申请环境句柄出错\n");return 0;}
    
      /** 设置环境属性,声明ODBC版本 **/
      sret = SQLSetEnvAttr(henv,SQL_ATTR_ODBC_VERSION,(void*)SQL_OV_ODBC3,SQL_IS_INTEGER);
      if(!isSuc(sret)){printf("声明ODBC版本出错\n");return 0;}
    
      /** 申请连接句柄 **/
      sret = SQLAllocHandle(SQL_HANDLE_DBC,henv,&hdbc);
      if(!isSuc(sret)){printf("申请连接句柄出错\n");return 0;}
    
      /** 连接数据源 **/
      sret = SQLDriverConnect(hdbc,NULL,(SQLCHAR*)szConnectString,SQL_NTS,(SQLCHAR *)szDriverOutput,2560,&sDriverOutputLength,SQL_DRIVER_NOPROMPT);
      if(!isSuc(sret)){printf("连接数据源出错\n");return 0;}
      else printf("\nCreate connection success !\n\n");
    
      /** 分配语句句柄 **/
      sret = SQLAllocHandle(SQL_HANDLE_STMT,hdbc,&hsmt);
      if(!isSuc(sret)){printf("分配语句句柄出错\n");return 0;}
    
      /** 执行drop语句 **/
      printf("execute sql: %s\n\n", szSQLDrop);
      sret = SQLExecDirect(hsmt,(SQLCHAR *)szSQLDrop,256);
      if(!isSuc(sret)){printf("exec drop sql fail !\n\n");return 0;}
      else printf("drop table t1(old) success !\n\n");
    
      /** 执行create语句 **/
      printf("execute sql: %s\n\n", szSQLCreate);
      sret = SQLExecDirect(hsmt,(SQLCHAR *)szSQLCreate,256);
      if(!isSuc(sret)){printf("exec create sql fail !\n\n");return 0;}
      else printf("create table t1(new) success !\n\n");
    
      /** 执行insert prepare语句 **/
      char szSQLPrepareInsert[256] = "insert into t1 values(?,?,?)";
      printf("prepare sql: %s\n\n", szSQLPrepareInsert);
      sret = SQLPrepare (hsmt,(SQLCHAR *)szSQLPrepareInsert,256);
      if(!isSuc(sret)){printf("prepare sql fail !\n\n");return 0;}
      else printf("prepare success !\n\n");
    
      size_t batchSize = 9;
      int param1[9] = {1,2,3,4,5,6,7,8,9};
      char param2[9][50] = {"name1","name2","name3","name4","name5","name6","name7","name8","name9"};
      int param3[9] = {11,12,13,14,15,16,17,18,19};
    
      sret = SQLBindParameter(hsmt,1,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER,0,0,param1,0,NULL);
      sret = SQLBindParameter(hsmt,2,SQL_PARAM_INPUT,SQL_C_CHAR,SQL_CHAR,5,0,param2,50,NULL);
      sret = SQLBindParameter(hsmt,3,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER,0,0,param3,0,NULL);
      if(!isSuc(sret))printf("bind param fail !\n\n");
      sret = SQLSetStmtAttr(hsmt, SQL_ATTR_PARAMSET_SIZE,(SQLPOINTER)batchSize, 0);
      if(!isSuc(sret))printf("set paramSize fail !\n\n");
    
      sret = SQLExecute(hsmt);
      if(!isSuc(sret))printf("exec stmt fail !\n\n");
      else printf("exec stmt success !\n\n");
    
      SQLLEN affRows = 0;
      sret = SQLRowCount(hsmt,&affRows);
      if(!isSuc(sret))printf("SQLRowCount stmt fail !\n\n");
            else printf("SQLRowCount stmt success !\n\n");
      printf("affect rows: %d\n\n",affRows);
    
      /** 执行select prepare语句 **/
      char szSQLPrepareSelect[256] = "select id,name,age from t1 where id < ?";
      printf("prepare sql: %s\n\n", szSQLPrepareSelect);
      sret = SQLPrepare (hsmt,(SQLCHAR *)szSQLPrepareSelect,256);
      if(!isSuc(sret)){printf("prepare sql fail !\n\n");return 0;}
      else printf("prepare success !\n\n");
    
      int select_param1 = 12;
      sret = SQLBindParameter(hsmt,1,SQL_PARAM_INPUT,SQL_C_SLONG,SQL_INTEGER,0,0,&select_param1,0,NULL);
      if(!isSuc(sret))printf("bind param fail !\n\n");
      sret = SQLExecute(hsmt);
      if(!isSuc(sret))printf("exec stmt fail !\n\n");
      else printf("exec stmt success !\n\n");
      sret = SQLSetStmtAttr(hsmt, SQL_ATTR_ROW_ARRAY_SIZE,(SQLPOINTER)1, 0);
      if(!isSuc(sret))printf("set paramSize fail !\n\n");
    
      int ans1 = 0;
      char ans2[50];
      int ans3 = 0;
      sret = SQLBindCol(hsmt,1,SQL_C_SLONG,&ans1,sizeof(int),NULL);
      sret = SQLBindCol(hsmt,2,SQL_C_CHAR,ans2,50,NULL);
      sret = SQLBindCol(hsmt,3,SQL_C_SLONG,&ans3,sizeof(int),NULL);
      if(!isSuc(sret))printf("define param fail !\n\n");
    
      do{
        sret = SQLFetch(hsmt);
        if(isSuc(sret)){
          printf("fetch success: [id:%d,name:%s,age:%d]\n",ans1,ans2,ans3);
        }
      }while(sret == 0);
    
      /** 释放语句句柄 **/
      SQLFreeHandle(SQL_HANDLE_STMT,hsmt);
      /** 提交连接的事务 **/
      SQLEndTran(SQL_HANDLE_DBC,hdbc,SQL_COMMIT);
      /** 断开与数据源的连接 **/
      SQLDisconnect(hdbc);
      /** 释放连接句柄 **/
      SQLFreeHandle(SQL_HANDLE_DBC,hdbc);
      /** 释放环境句柄 **/
      SQLFreeHandle(SQL_HANDLE_ENV,henv);
      printf("The connection will be closed !\nBye !\n");
    }

Go 语言连接示例

database/sql Go 语言标准库中用于数据库操作的接口,提供了一种通用的数据库操作方式,使得可以以统一的方式连接和操作不同的类型的数据库,而无需关心具体的数据库内部具体实现细节,GoldenDB 提供实现了该标准的 Go 语言驱动。

  • 环境配置
    GoldenDB 定制 Go 驱动。

  • 示例代码

    package main
    
    import (
      "database/sql"
      "fmt"
      _ "github.com/go-sql-driver/goldenDB"
      "log"
    )
    
    func main() {
      // 构建连接串
      dsn := "username:password@tcp(ip:port)/xxx"
    
      // 连接数据库
      db, err := sql.Open("mysql", dsn)
      if err != nil {
        log.Fatal(err)
      }
      defer db.Close()
    
      // 测试连接
      err = db.Ping()
      if err != nil {
        log.Fatal(err)
      }
      fmt.Println("Connected to the database successfully!")
    
      // 查询表 "good" 的第一个字段
      rows, err := db.Query("SELECT name FROM good")
      if err != nil {
        log.Fatal(err)
      }
      defer rows.Close()
    
      // 循环表的行
      for rows.Next() {
        var firstField string
        err := rows.Scan(&firstField)
        if err != nil {
          fmt.Println("读取行失败:", err.Error())
          return
        }
        fmt.Println("First field in table 'good':", firstField)
      }
    
      err = rows.Err()
      if err != nil {
        log.Fatal(err)
      }
    }

Python 语言连接示例

Python DB-API 是 Python 标准库中定义的数据库接口规范,用于开发数据库连接和操作模块,GoldenDB 提供实现了这一标准的驱动,用户可以遵循相同的操作方式和语法来使用。

  • 环境配置
    GoldenDB 定制 Python 驱动。

  • 示例代码

    # -*- coding: utf-8 -*-
    
    import pymysql
    # 连接相关参数
    conn = pymysql.connect(
        host='xx.xx.xx.xx',
        port=xxxx,
        user='xxxx',
        password='xxxx',
        database='xxx',
    )
    
    # 创建游标对象
    cursor = conn.cursor()
    
    # 执行 SQL 查询语句
    cursor.execute("select * from good")
    
    # 获取查询结果
    result = cursor.fetchall()
    # 获取第一条参数
    first_column_values = [row[0] for row in result]
    print(first_column_values.pop())
    # 关闭资源
    cursor.close()
    conn.close()
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论