我有一个简单的问题。我正在编写用于从数据库生成报告的桌面应用程序,并且我想从数据库中获取所有表和列(没有选择仅查询表和列的结果)将其放入列表中,用户可以选择它并使用它来构建自己的查询。我写了自己的代码来做到这一点,但速度很慢。如果你看到SQuirreL SQL Client,你会知道我的意思。我知道这是一些图书馆,但它们很大。Java缓存数据库表和列
我使用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>>
如果您对表名和列名使用SELECT语句,那么为什么不能将它们放入列表中?哪里有问题? – stepanian
现在让我来做,但是这是一个相当缓慢的过程,我想加快 – insict
你是什么意思慢?性能明智吗?或者编码? – stepanian