目录

Java程序中数据库连接,获取结果集内容

Java程序中数据库连接,获取结果集内容。

1、场景

Java程序,不通过mybatis进行数据库连接。获取连接信息之后,通过拼接sql语句,查询想要的结果。

本文所设计到的方法,是在特定的环境下实现的,并且运行通过,希望可以给您的开发提供一点帮助。

数据库信息,存储样式 (表1)

idsource_namedb_schema……
11231454数据库名称1{“host”:"…",“port”:…,“username”:"…",“password”:"…",“dbName”:"…"}……
……………………

使用数据库模块,信息存储样式 (表2)

idmodel_nametable_namesource_id……
1模型名称1表名111231454……
……………………

表1与表2的对应关系:表1.id == 表2.source_id

2、程序

2.1构建数据库连接方法

本程序的所有数据库信息,均存储在一张表中;通过传入需要连接的数据库id,获取数据库的连接信息。

import com.alibaba.fastjson.JSONObject;

public Statement jdbcDao(String sourceId) {
// louzhi
// 通过 mybatis,获取数据库的连接参数信息
Map<String, String> dbSchema = getSourceDao.getSourceInformation(sourceId);
String sourceInformation = dbSchema.get("db_schema");
Map<String, Object> strMap = JSONObject.parseObject(sourceInformation);
System.out.println("strMap:" + strMap);
String host = strMap.get("host").toString();
String port = strMap.get("port").toString();
String dbName = strMap.get("dbName").toString();
String url = "jdbc:postgresql://" + host + ":" + port + "/" + dbName;
String userName = strMap.get("username").toString();
String passWord = strMap.get("password").toString();
String className = "org.postgresql.Driver";
try {
Class.forName(className);//加载数据库驱动
System.out.println("数据库驱动加载成功!");
Connection connection = DriverManager.getConnection(url, userName, passWord); //连接数据库
System.out.println("成功地获取数据库连接!" + connection);
Statement statement = connection.createStatement();
return statement;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}

2.2 指定数据库,查询内容

service 层,服务实现类;通过表名,查询数据源 id,再调用数据库连接实现方法,实现指定数据库的增,删,改,查。

@Override
public Map<String, Object> getModelDataById(ModelDataEntity modelDataEntity) {
String tableName = modelDataEntity.getTableName();
if (StrUtil.isBlank(tableName)) {
throw new DataException("数据库表为空");
}
String id = modelDataEntity.getId();
if (StrUtil.isBlank(id)) {
throw new DataException("数据库主键为空");
}
// 调用 mybatis 的 dao 层,查询 sourceid
String sourceId = getSourceDao.getSourceId(tableName);
// 调用数据库连接方法,传入 sourceid,获取数据库的连接
Statement statement = jdbcDao(sourceId);
// 拼接 sql
StringBuffer sb = new StringBuffer();
sb.append("SELECT * FROM " + tableName + " WHERE " + "id = '" + id + "'");
System.out.println(sb.toString());
try {
// 执行 sql 获取结果集
// ResultSet 对象常用的一些方法,(百度哈哈哈)
ResultSet resultSet = statement.executeQuery(sb.toString());
// ResultSetMetaData 的使用,获取对象
// getColumnCount():返回当前 ResultSet 对象中的列数。
// getColumnName(index):返回第列的名称
ResultSetMetaData metaData = resultSet.getMetaData();
while (resultSet.next()) {
Map<String, Object> data = new HashMap<>();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++) {
data.put(metaData.getColumnName(i), resultSet.getObject(i));
}
return data;
}
} catch (SQLException e) {
e.printStackTrace();
}
return null;
}