要查询表中全部数据,但表中数据有100万条,用什么办法,合理的查询全部数据(Java代码)
时间: 2024-04-13 15:28:26 浏览: 74
当需要查询表中的全部数据,但数据量很大(例如100万条),为了避免一次性加载过多数据导致内存溢出或性能问题,可以使用分页查询的方式逐页获取数据。以下是一个示例的Java代码:
```java
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class DataQuery {
private static final int PAGE_SIZE = 1000; // 每页数据大小
private static final String DB_URL = "jdbc:mysql://localhost:3306/db_name";
private static final String DB_USER = "username";
private static final String DB_PASSWORD = "password";
public static void main(String[] args) {
Connection conn = null;
PreparedStatement stmt = null;
ResultSet rs = null;
try {
// 建立数据库连接
conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASSWORD);
// 查询总记录数
stmt = conn.prepareStatement("SELECT COUNT(*) FROM your_table");
rs = stmt.executeQuery();
rs.next();
int totalRecords = rs.getInt(1);
// 计算总页数
int totalPages = (int) Math.ceil((double) totalRecords / PAGE_SIZE);
// 分页查询数据
for (int page = 1; page <= totalPages; page++) {
stmt = conn.prepareStatement("SELECT * FROM your_table LIMIT ?, ?");
stmt.setInt(1, (page - 1) * PAGE_SIZE);
stmt.setInt(2, PAGE_SIZE);
rs = stmt.executeQuery();
// 处理当前页的数据
while (rs.next()) {
// 处理每一行数据,例如打印或保存到集合中
// ...
}
rs.close();
stmt.close();
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (rs != null) rs.close();
if (stmt != null) stmt.close();
if (conn != null) conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
```
上述代码通过分页查询的方式,每次查询一页数据,处理完当前页再查询下一页,以此避免一次性加载全部数据。请根据实际情况修改代码中的数据库连接信息、表名和处理数据的逻辑。
阅读全文