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

该博客介绍了一种不使用MyBatis,而是直接通过Java代码获取数据库连接并拼接SQL语句进行查询的方法。首先,从数据库表中获取连接信息,然后构建数据库连接,加载驱动并建立连接。在服务层,根据表名获取数据源ID,进一步创建数据库连接,拼接SQL查询语句,执行查询并处理结果集。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值