java中获取外部数据库连接
场景描述
在服务中通过jdbc的方式连接一个外部数据库进行数据库操作
实现思路
通过平台的架构组件引入需要的数据库类型(如Oracle、sqlServer等)和数据库组件,
具体实现
本例以sqlServer数据库为例
1.架构中添加组件
ide切换到架构页,默认是开发架构,拖放需要的数据库类型组件和数据库组件,并连线,然后切换到运行架构中进行连线
2.配置数据库信息
开发时可以切换到高级页在数据库设置中找到添加的数据库进行数据库信息的配置
正式部署(生产运行)在应用/服务管理列表中找到对应的应用在应用配置——数据库设置中找到添加的数据库进行数据库信息的配置
3.服务中获取数据库连接进行操作
在服务代码中通过环境变量获取数据库的配置信息拼接url,进行数据库连接,开发时测试需要通过云ide的方式,不能用本地ide启动测试
也可以不用第2步的配置直接在代码中写死数据库url,但如果数据库有改变就要调整代码,所以推荐的方式是进行数据库配置通过环境变量获取配置信息
环境变量的命名跟架构中添加的数据库组件的ID有关,如下数据库组件的ID是comp.database5,环境变量的名字就是COMP_DATABASE5开头的,后面的值是固定,需要注意都是大写的
代码中要的类需要导入的是:
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
具体读取环境变量获取数据库连接执行sql的代码如下:
// 获取数据库服务地址
String dbHost = System.getProperty("COMP_DATABASE5_DBHOST");
if (dbHost.isEmpty()) {
dbHost = System.getenv("COMP_DATABASE5_DBHOST");
}
// 获取数据库端口
String dbPort = System.getProperty("COMP_DATABASE5_DBPORT");
if (dbHost.isEmpty()) {
dbPort = System.getenv("COMP_DATABASE5_DBPORT");
}
// 获取数据库名称
String dbName = System.getProperty("COMP_DATABASE5_DBNAME");
if (dbHost.isEmpty()) {
dbName = System.getenv("COMP_DATABASE5_DBNAME");
}
// 获取数据库用户名
String dbUser = System.getProperty("COMP_DATABASE5_DBUSER");
if (dbHost.isEmpty()) {
dbUser = System.getenv("COMP_DATABASE5_DBUSER");
}
// 获取数据库密码
String dbPasswd = System.getProperty("COMP_DATABASE5_DBPASSWD");
if (dbHost.isEmpty()) {
dbPasswd = System.getenv("COMP_DATABASE5_DBPASSWD");
}
// 获取数据库类型
String dbType = System.getProperty("COMP_DATABASE5_DBTYPE");
if (dbHost.isEmpty()) {
dbType = System.getenv("COMP_DATABASE5_DBTYPE");
}
// 获取dbSchema
String dbSchema = System.getProperty("COMP_DATABASE5_DBSCHEMA");
if (dbHost.isEmpty()) {
dbSchema = System.getenv("COMP_DATABASE5_DBSCHEMA");
}
// 获取数据库连接属性
String dbProperties = System.getProperty("COMP_DATABASE5_DBPROPERTIES");
if (dbHost.isEmpty()) {
dbProperties = System.getenv("COMP_DATABASE5_DBPROPERTIES");
}
//不同的数据库类型url的拼接是不一样的,本案例是sqlserver,其他数据库可以参考java中标准的jdbc连接url的拼接
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();
}
}