gpt4 book ai didi

Java 缓存数据库表和列

转载 作者:行者123 更新时间:2023-12-01 13:13:44 27 4
gpt4 key购买 nike

我有一个简单的问题。我正在编写用于从数据库生成报告的桌面应用程序,我想从数据库获取所有表和列(仅选择查询的结果没有表和列)将其放入列表中,用户可以在其中选择它并用于构建自己的查询。我已经编写了自己的代码来执行此操作,但速度很慢。如果您看到 SQuirreL SQL Client,您就会明白我的意思。我知道有一些库可以做到这一点,但它们很大。

我使用SELECT查询得到所有表名,然后使用SELECT查询以从该表名称获取列。

我的代码:

public List<String> getTables() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
List<String> tables = new ArrayList<String>();
try {
conn = getConnection();
stmt = conn.createStatement();
rs = stmt.executeQuery("SELECT name FROM sys.Tables");
while (rs.next()) {
tables.add(rs.getString(1));
}
} catch (SQLException sqle) {
sqle.printStackTrace();
} finally {
DbUtils.closeQuietly(conn, stmt, rs);
}
return tables;
}

public List<String> getColumns(String table) {
Connection conn = null;
Statement smt = null;
ResultSet rs = null;
// DatabaseMetaData dm = null;
List<String> colList = new ArrayList<String>();
try {
conn = getConnection();
// dm = conn.getMetaData();
smt = conn.createStatement();
rs = smt.executeQuery("SELECT COLUMN_NAME FROM " + dbName
+ ".INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = '" + table
+ "' AND TABLE_SCHEMA = 'dbo' ORDER BY 1");
// rs = dm.getPrimaryKeys(null, null, tName);
while (rs.next()) {
colList.add(rs.getString(1));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
DbUtils.closeQuietly(conn, smt, rs);
}
return colList;
}

一切都转到Map<String, List<String>>

最佳答案

我建议,不要在循环中运行代码来遍历每个表,而是在线程中并行执行。您可以使用ExecutorService并尝试不同的线程池大小,看看与 RAM 相比,处理效率更高。

关于Java 缓存数据库表和列,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22629378/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com