Java 中获取数据库连接参数
应用默认使用 MySQL 数据库。主服务连接一个数据库实例组件,这个数据库实例组件再连接到 MySQL 数据库类型组件。
- 开发调试时,系统自动分配数据库实例
- 生产运行时,必须使用外部安装的数据库
- 如果一个应用只连接一个数据库,可以直接修改“业务数据库” data-service 的连接参数
- 如果一个应用要连接多个数据库,需要在架构中添加数据库类型组件和数据库实例组件
- 服务模块连接哪个数据库实例组件,即表示服务模块使用哪个数据库,在服务模块中创建数据集,通过数据集访问数据库表
- 架构中的数据库实例组件,使用环境变量存储数据库连接参数,在 Java 中通过获取环境变量,获取数据库连接参数
架构分为开发架构和运行架构
- 系统默认显示开发架构
- 在开发架构中配置的数据库是开发调试时使用的
- 在运行架构中配置的数据库是生产运行时使用的
添加新的数据库实例
在架构中,默认只有一个数据库实例,只能连接一个数据库。要连接多个数据库时,需要添加新的数据库实例组件。添加时,选择右下角没有对勾的数据库实例组件,如下图所示。有对勾的数据库实例组件表示已被使用
架构中默认添加了 MySQL 和 PostgreSQL 两种数据库类型组件。根据数据库类型,添加对应的数据库类型组件。先在开发架构中配置(添加组件和连线),在切换到运行架构中配置(仅连线)
配置数据库信息
- 开发调试时配置
- 在架构中的数据库实例组件的属性上配置
- 在高级页的数据库设置中,找到对应的数据库实例,配置数据库连接信息
- 正式部署(生产运行)时配置
- 在应用/服务管理列表中,找到对应的应用,在“配置—数据库设置”中,找到对应的数据库实例,配置数据库连接信息,如下图所示
获取数据库连接参数
架构中的数据库实例组件,使用环境变量存储数据库连接参数,在 Java 中通过获取环境变量,获取数据库连接参数,之后可通过 JDBC 的方式连接数据库,进行数据库操作。开发调试时需要使用云 IDE,不能使用本地 IDE。
环境变量的命名跟架构中数据库实例组件的 ID 相关,如下图所示,数据库实例组件的 ID 是 comp.database2,环境变量的名字就是 COMP_DATABASE2 开头的,后面的值是固定,需要注意都是大写的
代码中需要引用下面这些类
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();
}
}