我有一个JTable
结构简单的,我想用数据库数据填充它。
我写了这段代码,但现在不知道如何继续!
在 JTable 中简单显示数据库数据
无需创建自定义 TableModel。
有关将数据加载到 DefaultTableModel 并在 JTable 中显示模型的简单方法,请参阅数据库中的表Table From Database Example
中的代码。
任何愚蠢到包含一个空的 catch 块的人肯定会挣扎:
} catch (SQLException ex) {
}
这是一个非常糟糕的主意。您应该至少记录或打印堆栈跟踪,或者在方法签名中添加一个 throws 子句并在其他地方处理它。
你的代码风格也很差。可读性很重要。发展一种连贯的风格并坚持下去。
这个异常是因为 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 中。
对不起,我的英语不好。
祝你好运。