-2

我有一个JTable结构简单的,我想用数据库数据填充它。

我写了这段代码,但现在不知道如何继续!

4

3 回答 3

4

在 JTable 中简单显示数据库数据

无需创建自定义 TableModel。

有关将数据加载到 DefaultTableModel 并在 JTable 中显示模型的简单方法,请参阅数据库中的表Table From Database Example中的代码。

于 2013-07-28T23:17:05.443 回答
3

任何愚蠢到包含一个空的 catch 块的人肯定会挣扎:

} catch (SQLException ex) {
    }

这是一个非常糟糕的主意。您应该至少记录或打印堆栈跟踪,或者在方法签名中添加一个 throws 子句并在其他地方处理它。

你的代码风格也很差。可读性很重要。发展一种连贯的风格并坚持下去。

于 2013-07-28T23:14:21.357 回答
3

这个异常是因为 cols 变量没有在任何地方初始化。

因此您应该初始化 TableModels 构造函数中或 TableModel 之外的所有字段。

好吧,那么您不应该在 TableModels 的主要方法中使用元数据或任何类型的使用数据库。

只是在构造函数中或 TableModel 之外。

像这样。尝试:

class d9tableModel extends AbstractTableModel {

Connection con;
Statement statement;
ResultSetMetaData metadata;
ResultSet resultSet;
String dbName = "mydb";
String bdUser = "root";
String dbPassword = "2323";
String dbUrl = "jdbc:mysql://localhost/mydb";
String query = "select * from mytable";
ArrayList<String> cols = new ArrayList<>();
ArrayList<ArrayList<String>> data = new ArrayList<>();

public d9tableModel() {

    try {
        con = DriverManager.getConnection(dbUrl, bdUser, dbPassword);
        System.out.println("Connected to database successfully!");
        statement = con.createStatement();
        resultSet = statement.executeQuery(query);

        int c = resultSet.getMetaData().getColumnCount();
        for (int i = 0; i < c; i++) {
            cols.add(resultSet.getMetaData().getColumnName(i));
        }

        while (resultSet.next()) {
            ArrayList<String> row = new ArrayList<>();
            for (int i = 0; i < c; i++) {
                row.add(resultSet.getString(i));
            }
            data.add(row);
        }
    } catch (SQLException ex) {
        System.out.println("Could not connect to database");
    } finally {
        try {
            if (statement != null) {
                statement.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException ex) {
            Logger.getLogger(d9tableModel.class.getName()).log(Level.SEVERE, null, ex);
        }
    }
}

@Override
public int getRowCount() {
    return data.size();
}

@Override
public int getColumnCount() {
    return cols.size();
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    ArrayList<String> row = data.get(rowIndex);
    return row.get(columnIndex);
}

@Override
public String getColumnName(int column) {
    return cols.get(column);
}}

此表模型将您的数据库表精确映射到您的 JTable 中。

对不起,我的英语不好。

祝你好运。

于 2013-07-30T09:45:01.257 回答