下面是一个用Java代码连接数据库,并使用反射动态给实体类的字段赋值,然后动态获取值的示例:

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DatabaseExample {
    public static void main(String[] args) {
        // 连接数据库
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String username = "root";
        String password = "password";
        try (Connection connection = DriverManager.getConnection(url, username, password)) {
            // 执行SQL查询
            String sql = "SELECT * FROM mytable";
            try (PreparedStatement statement = connection.prepareStatement(sql);
                 ResultSet resultSet = statement.executeQuery()) {
                // 获取实体类的Class对象
                Class<?> entityClass = Entity.class;
                // 遍历查询结果
                while (resultSet.next()) {
                    // 创建实体类对象
                    Object entity = entityClass.getDeclaredConstructor().newInstance();
                    // 获取实体类的所有字段
                    Field[] fields = entityClass.getDeclaredFields();
                    // 遍历字段并赋值
                    for (Field field : fields) {
                        // 设置字段可访问,以便赋值
                        field.setAccessible(true);
                        // 获取字段名
                        String fieldName = field.getName();
                        // 根据字段名从查询结果中获取对应的值
                        Object value = resultSet.getObject(fieldName);
                        // 给实体类的字段赋值
                        field.set(entity, value);
                    }
                    // 打印实体类的字段值
                    for (Field field : fields) {
                        // 设置字段可访问,以便获取值
                        field.setAccessible(true);
                        // 获取字段名
                        String fieldName = field.getName();
                        // 获取实体类的字段值
                        Object value = field.get(entity);
                        System.out.println(fieldName + ": " + value);
                    }
                    System.out.println();
                }
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    // 示例实体类
    public static class Entity {
        private int id;
        private String name;
        private int age;

        public Entity() {
        }

        public int getId() {
            return id;
        }

        public void setId(int id) {
            this.id = id;
        }

        public String getName() {
            return name;
        }

        public void setName(String name) {
            this.name = name;
        }

        public int getAge() {
            return age;
        }

        public void setAge(int age) {
            this.age = age;
        }
    }
}

请将示例中的数据库连接信息(url、username和password)替换为您自己的数据库连接信息,并根据您的实际需求调整示例中的实体类和SQL查询语句


原文地址: http://www.cveoy.top/t/topic/ivto 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录