java 原生 jdbc api 获取通用的查询sql语句的结果集(自定义)

maven依赖

<dependency>
			<groupId>mysql</groupId>
			<artifactId>mysql-connector-java</artifactId>
			<version>5.1.31</version>
		</dependency>

1、获取数据库连接 connection

    private static String driverName = "com.mysql.jdbc.Driver";
    private static String jdbcUrl = "jdbc:mysql://192.168.1.6:3306/10bei_portal";
    private static String user = "root";
    private static String pwd = "123456";
    
    public static Connection getConnection() {
        Connection conn = null;
        // 加载驱动
        try {
            Class.forName(driverName);
            conn = DriverManager.getConnection(jdbcUrl, user, pwd);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        
        return conn;
    }

2、用获取到的connection对象执行查询sql

    //这里是将 sql 的select 字段映射成map的key值
    public static List<Map<String,Object>> execQuerySql(String sql) {
        Connection conn = getConnection();
        if(conn == null) {
            System.err.println("获取数据库连接失败,请重试");
            return null;
        }
        List<Map<String,Object>> resultList = new ArrayList<>();
        try {
            List<String> columnNames = new ArrayList<>();
            PreparedStatement ps = conn.prepareStatement(sql);
            ResultSet rs = ps.executeQuery();
            int columnCount = rs.getMetaData().getColumnCount();
            Map<String,String> colTypeMap = new HashMap<>();
            //这里的循环是获取select 语句中的 表字段 名称 及 表字段类型
            for(int i = 1;i<columnCount+1;i++) {
                String columnName = rs.getMetaData().getColumnName(i);//表字段名称
                columnNames.add(columnName);
                String columnTypeName = rs.getMetaData().getColumnTypeName(i);//表字段类型
                System.out.println(columnTypeName);
                colTypeMap.put(columnName, columnTypeName);
            }
            System.out.println(columnNames);
            while(rs.next()) {
                Map<String,Object> rowMap = new HashMap<>();
                for(String colName : columnNames ) {
                    if("INT".equals(colTypeMap.get(colName))) {
                        rowMap.put(colName, rs.getInt(colName));
                        continue;
                    }
                    if("VARCHAR".equals(colTypeMap.get(colName))) {
                        rowMap.put(colName, rs.getString(colName));
                        continue;
                    }
                    if("SMALLINT".equals(colTypeMap.get(colName))) {
                        rowMap.put(colName, rs.getShort(colName));
                        continue;
                    }
                    if("TINYINT".equals(colTypeMap.get(colName))) {
                        rowMap.put(colName, rs.getShort(colName));
                        continue;
                    }
                    if("DATETIME".equals(colTypeMap.get(colName))) {
                        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
                        
                        rowMap.put(colName, sdf.format(rs.getDate(colName)));
                        
                        continue;
                    }
                    // 这里的getObject 可以获取 int/varchar/datetime等字段类型的值
                    rowMap.put(colName, rs.getObject(colName));
                    
                }
                resultList.add(rowMap);
            }
            
            rs.close();
            ps.close();
            
            
            return resultList;
        } catch (SQLException e) {
            e.printStackTrace();
        }finally {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        
        return null;
    }

以上可以获取通用的select语句

局限是此处的sql语句的条件参数没有实现通用的赋值 ^~^  !!!!!,读者这里可以自行补充。。。。。。。

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值