如何使用Java执行按部分选择,因为它包含许多记录?

问题描述 投票:0回答:1

我有一个包含大约 100,000 条记录的表,我执行了 SELECT 来获取记录总数,因为它可能会有所不同,我需要查阅该表并获取 4 个特定字段(nombre、apellido、puesto)的所有记录,但是因为它包含很多信息,所以需要很长时间,

我正在考虑分部分进行,即进行一个 SELECT,它只给我带来 10 000 条记录,并使用 FOR 进行迭代,直到达到表的最大记录数,同时这些记录存储在一个列表中因为在获取这些记录后我需要将它们插入到另一个表中。

这是我的代码,但它没有做任何事情。

我不确定for是否正确,我想做的是执行select直到达到最大记录数,并将数据保存在Employees类型列表中

有人可以纠正我或告诉我 FOR 应该是什么样子来获取 100,000 条记录并将它们存储在列表中吗?

public class TestConnect {

    List<Empleados> empleadoList;

    public static void main(String[] args) throws SQLException {
          
        TestConnect test = new TestConnect();
        test.read();


    }

    //metodo para traer los datos de la tabla empleados
    public void read() {
        String user = "postgres";
        String pss = "admin123";

        empleadoList = new ArrayList<>();
        Empleados empleado = null;
        ResultSet result = null;
        PreparedStatement stm = null;
        Connection connect = null;
        try {
            connect = DriverManager.getConnection("jdbc:postgresql://localhost:5432/bd_test", user, pss);
            PreparedStatement stmCount = connect.prepareStatement("SELECT COUNT(*) from empleados");
            ResultSet resultCount = stmCount.executeQuery();

            int records = 0;
            while (resultCount.next()) {
                records = resultCount.getInt(1);
            }
            System.out.println(" RECORDS    " + records);

            for (int i = 0; i <= records; i += 10000) {
                stm = connect.prepareStatement("SELECT * FROM empleados limit 10000");
                result = stm.executeQuery();
                while (result.next()) {

                    empleado = new Empleados();
                    empleado.setId(result.getInt("id"));
                    empleado.setNombre(result.getString("nombre"));
                    empleado.setApellido(result.getString("apellido"));
                    empleado.setPuesto(result.getString("puesto"));
                    empleadoList.add(empleado);
                }
            }

        } catch (SQLException ex) {
        } finally {
            try {
                result.close();
                stm.close();
                connect.close();

            } catch (SQLException ex) {
            }
        }
    }


}
java postgresql jdbc prepared-statement resultset
1个回答
0
投票

创建 Postgres 视图

`CREATE MATERIALIZED VIEW test_view as SELECT a, b, c, d from test1`

它只会返回那 4 列。 在这种情况下你不需要

for statement
。 使用

调用视图
`connect.prepareStatement("SELECT * from test_view")`
© www.soinside.com 2019 - 2024. All rights reserved.