栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

优化在JDBC上调用JTable的数据

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

优化在JDBC上调用JTable的数据

恕我直言,坏习惯的根源是您不必要地查询数据库的多重时间来获取所需的数据(列,行,行号,列号等):

要获取列号:

ResultSet rs = stmt.executeQuery("SELECt * FROM " + tableName);

要获取行号:

ResultSet rs = stmt.executeQuery("SELECt COUNT(*) FROM " + tableName);

要获取行(这是最糟糕的原因,因为它在循环内):

data = stmt.executeQuery("SELECt " + columnName + " FROM " + tableName + " LIMIT " + j + ", " + 1);

如何解决

只需查询数据库一次。单个ResultSet及其关联的ResultSetmetaData应该足以实现您的目标。另外,正如已经建议的那样,使用a

SwingWorker
在单独的线程中进行数据库调用。例如:

final JTable table = new JTable();SwingWorker<Void, TableModel> worker = new SwingWorker<Void, TableModel> () {    @Override    protected Void doInBackground() throws Exception {        ResultSet resultSet = stmt.executeQuery("SELECt * FROM " + tableName);        ResultSetmetaData metaData = resultSet.getmetaData();        int columnCount = metaData.getColumnCount(); // columns number        String[] columnNames = new String[columnCount];        for (int i = 1; i <= columnCount; i++) { columnNames[i] = metaData.getColumnName(i); // fill columns names        }        resultSet.last();        int rowCount = resultSet.getRow(); // get rows number        resultSet.beforeFirst();        Object[][] data = new Object[rowCount][columnCount];        int currentRow = 0;        while (resultSet.next()) { for (int currentColumn = 1; currentColumn <= columnCount; currentColumn++) {     data[currentRow][currentColumn - 1] = resultSet.getObject(currentColumn); // fill data set  }  currentRow++;        }        TableModel model = new DefaultTableModel(data, columnNames);        publish(model);        return null;    }    @Override    protected void process(List<TableModel> chunks) {        TableModel model = chunks.get(0);        table.setModel(model);    }}worker.execute();


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/385836.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号