Java缓存数据库表和列

时间:2014-03-25 08:48:37

标签: java database caching

我有一个简单的问题。我正在编写用于从数据库生成报表的桌面应用程序,我想从数据库中获取所有表和列(没有选择查询的结果只有表和列)将其放入列表中,用户可以在其中选择它并用于构建自己的查询。我已经编写了自己的代码来执行此操作,但速度很慢。如果您看到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>>

1 个答案:

答案 0 :(得分:1)

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