java中jdbc,利用反射查询数据

java中jdbc,利用反射查询数据

 /**
     * 加载JDBC驱动;
     * 建立并获取数据库连接;
     * 创建 JDBC Statements 对象;
     * 设置SQL语句的传入参数;
     * 执行SQL语句并获得查询结果;
     * 对查询结果进行转换处理并将处理结果返回;
     * 释放相关资源(关闭Connection,关闭Statement,关闭ResultSet);
     *
     * @return list
     */
    public static List<Map<String, Object>> queryForList() {
        // 连接
        Connection connection = null;
        // 执行请求
        PreparedStatement stmt = null;
        // 返回数据
        ResultSet rs = null;
        // 返回格式
        List<Map<String, Object>> resultList = new ArrayList<>();
        try {
            // 加载JDBC驱动(加不加newInstance都行,
            // 因为静态初始化器的中已经进行了注册:
            // DriverManager.registerDriver(new Driver());
            // 所以不需要加newInstance,加了也没事)
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            String url = "jdbc:mysql://localhost:3306/test?characterEncoding=utf-8";
            String user = "root";
            String password = "123456";
            // 获取数据库连接
            connection = DriverManager.getConnection(url, user, password);
            //要执行的sql语句
            String sql = "SELECT * FROM `user` WHERE id= ?";
            // 创建Statement对象用于向数据库发送SQL语句(每一个Statement为一次数据库执行请求)
            stmt = connection.prepareStatement(sql);
            // 设置传入参数(int、string、list、object······)
            stmt.setInt(1, 7);
            // 执行SQL语句
            rs = stmt.executeQuery();
            // 处理查询结果(将查询结果转换成List<Map>格式)
            ResultSetMetaData rsmd = rs.getMetaData();
            int num = rsmd.getColumnCount();
            Map<String, Object> map = new HashMap<>();
            while (rs.next()) {
                for (int i = 0; i < num; i++) {
                    // 获取字段名,从1开始
                    String columnName = rsmd.getColumnName(i + 1);
                    // 通过字段名获取值,放入map里
                    map.put(columnName, rs.getString(columnName));
                }
                // 将map里的数据放入list
                resultList.add(map);
            }
        } catch (Exception e) {
            e.printStackTrace();
            System.out.println(e.getMessage());
        } finally {
            // 最后关闭所有连接
            try {
                // 关闭结果集
                if (rs != null) {
                    rs.close();
                }
                // 关闭执行请求
                if (stmt != null) {
                    stmt.close();
                }
                // 关闭数据库连接
                if (connection != null) {
                    connection.close();
                }
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        // 返回最后的数据list
        return resultList;
    }

数据表

SET NAMES utf8mb4;
SET FOREIGN_KEY_CHECKS = 0;

-- ----------------------------
-- Table structure for user
-- ----------------------------
DROP TABLE IF EXISTS `user`;
CREATE TABLE `user`  (
  `id` int(4) NOT NULL AUTO_INCREMENT COMMENT 'id主键',
  `name` varchar(25) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '姓名',
  `password` varchar(50) CHARACTER SET utf8 COLLATE utf8_general_ci NOT NULL COMMENT '密码',
  `sex` int(2) NOT NULL DEFAULT 0 COMMENT '性别:0女,1男',
  `birth` datetime(0) NOT NULL COMMENT '生日',
  `update_date` datetime(0) NOT NULL DEFAULT CURRENT_TIMESTAMP(0) ON UPDATE CURRENT_TIMESTAMP(0) COMMENT '更新日期',
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB AUTO_INCREMENT = 300 CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;

SET FOREIGN_KEY_CHECKS = 1;
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Azure++

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值