Java 中获取数据库连接参数

应用默认使用 MySQL 数据库。主服务连接一个数据库实例组件,这个数据库实例组件再连接到 MySQL 数据库类型组件。

  • 开发调试时,系统自动分配数据库实例
  • 生产运行时,必须使用外部安装的数据库
  • 如果一个应用只连接一个数据库,可以直接修改“业务数据库” data-service 的连接参数
  • 如果一个应用要连接多个数据库,需要在架构中添加数据库类型组件和数据库实例组件
  • 服务模块连接哪个数据库实例组件,即表示服务模块使用哪个数据库,在服务模块中创建数据集,通过数据集访问数据库表
  • 架构中的数据库实例组件,使用环境变量存储数据库连接参数,在 Java 中通过获取环境变量,获取数据库连接参数

架构分为开发架构和运行架构

  • 系统默认显示开发架构
  • 在开发架构中配置的数据库是开发调试时使用的
  • 在运行架构中配置的数据库是生产运行时使用的

添加新的数据库实例

在架构中,默认只有一个数据库实例,只能连接一个数据库。要连接多个数据库时,需要添加新的数据库实例组件。添加时,选择右下角没有对勾的数据库实例组件,如下图所示。有对勾的数据库实例组件表示已被使用

架构中默认添加了 MySQL 和 PostgreSQL 两种数据库类型组件。根据数据库类型,添加对应的数据库类型组件。先在开发架构中配置(添加组件和连线),在切换到运行架构中配置(仅连线)

图 0

配置数据库信息

  • 开发调试时配置
    • 在架构中的数据库实例组件的属性上配置
    • 在高级页的数据库设置中,找到对应的数据库实例,配置数据库连接信息
  • 正式部署(生产运行)时配置
    • 在应用/服务管理列表中,找到对应的应用,在“配置—数据库设置”中,找到对应的数据库实例,配置数据库连接信息,如下图所示

获取数据库连接参数

架构中的数据库实例组件,使用环境变量存储数据库连接参数,在 Java 中通过获取环境变量,获取数据库连接参数,之后可通过 JDBC 的方式连接数据库,进行数据库操作。开发调试时需要使用云 IDE,不能使用本地 IDE。

环境变量的命名跟架构中数据库实例组件的 ID 相关,如下图所示,数据库实例组件的 ID 是 comp.database2,环境变量的名字就是 COMP_DATABASE2 开头的,后面的值是固定,需要注意都是大写的

图 0

代码中需要引用下面这些类

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

获取环境变量的代码如下:

// 获取数据库服务地址
String dbHost = ContextUtil.getEnv("COMP_DATABASE2_DBHOST");

// 获取数据库端口
String dbPort = ContextUtil.getEnv("COMP_DATABASE2_DBPORT");

// 获取数据库名称
String dbName = ContextUtil.getEnv("COMP_DATABASE2_DBNAME");

// 获取数据库用户名
String dbUser = ContextUtil.getEnv("COMP_DATABASE2_DBUSER");

// 获取数据库密码
String dbPasswd = ContextUtil.getEnv("COMP_DATABASE2_DBPASSWD");

// 获取数据库类型
String dbType = ContextUtil.getEnv("COMP_DATABASE2_DBTYPE");

// 获取dbSchema
String dbSchema = ContextUtil.getEnv("COMP_DATABASE2_DBSCHEMA");

// 获取数据库连接属性
String dbProperties = ContextUtil.getEnv("COMP_DATABASE2_DBPROPERTIES");

不同的数据库类型,URL 的拼接是不一样的,本例是 SQLServer, 其他数据库可以参考 Java 中标准的 JDBC 连接 URL 的拼接。获取数据库连接,执行 SQL 的代码如下:

String url = "jdbc:jtds:" + dbType + "://" + dbHost + ":" + dbPort + ";databaseName=" + dbName;//自己判断是否有数据库连接属性进行拼接
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
    Class.forName("net.sourceforge.jtds.jdbc.Driver");
    conn = DriverManager.getConnection(url, dbUser, dbPasswd);
    String sql = "select * from dbo.AP_RQ";
    stmt = conn.createStatement();
    rs = stmt.executeQuery(sql);
    while (rs.next()) {
        System.out.println(rs.getString("fName") );
    }
} catch (ClassNotFoundException e) {
    System.out.println("加载驱动异常");
    e.printStackTrace();
} catch (SQLException e) {
    System.out.println("数据库异常");
    e.printStackTrace();
} finally {
    try {
        if (rs != null)
            rs.close(); // 关闭结果数据集
        if (stmt != null)
            stmt.close(); // 关闭执行环境
        if (conn != null)
            conn.close(); // 关闭数据库连接
    } catch (SQLException e) {
        e.printStackTrace();
    }
}

results matching ""

    No results matching ""