这允许我从我的数据库中获取数据,将其存储为DefaultTableModel并将该模型传递到我的GUI上 - 用数据库数据填充我的jTable。
这是我的Account类中的方法:
public static DefaultTableModel buildTableModel() throws SQLException {
Vector<Vector<Object>> data = new Vector<Vector<Object>>();
Vector columns = new Vector();
PreparedStatement ps = null;
ResultSet rs = null;
try {
String stmt = "SELECT * FROM APP.DATAVAULT";
ps = Main.getPreparedStatement(stmt);
rs = ps.executeQuery();
ResultSetMetaData metaData = rs.getMetaData();
// names of columns
Vector<String> columnNames = new Vector<String>();
int columnCount = metaData.getColumnCount();
for (int column = 1; column <= columnCount; column++) {
columnNames.add(metaData.getColumnName(column));
}
// data of the table
while (rs.next()) {
Vector<Object> vector = new Vector<Object>();
for (int columnIndex = 1; columnIndex <= columnCount; columnIndex++) {
vector.add(rs.getObject(columnIndex));
}
data.add(vector);
}
} finally {
try {
ps.close();
} catch (Exception e) {
}
try {
rs.close();
} catch (Exception e) {
}
}
DefaultTableModel tableModel = new DefaultTableModel(data, columns);
return tableModel;
}
然后,在我的GUI中,我将以下代码作为字段
Account acc = new Account();
DefaultTableModel dTableModel = acc.buildTableModel();
最后,在我的GUI构造函数中,我将datavault jTable的模型设置为我从数据库中获得的模型
public SPPMainGUI() {
initComponents();
datavaultjTable.setModel(dTableModel);
}
我已尝试在线路周围放置一个try-catch块
DefaultTableModel dTableModel = acc.buildTableModel();
但错误仍然存在。我有什么选择?我知道我被调用的方法会抛出一个SQLException,但是为什么当我捕获一个SQLException时它不想玩球?
编辑: 错误:
答案 0 :(得分:0)
我似乎通过以下方式解决了这个问题:
在我的GUI中,我的字段如下:Account acc = new Account();
DefaultTableModel dTableModel;
构造函数现在显示为:
public SPPMainGUI() throws SQLException {
this.dTableModel = Account.buildTableModel();
initComponents();
datavaultjTable.setModel(dTableModel);
}
我的GUI中的My Main方法现在看起来像这样:
public static void main(String args[]) {
/* Create and display the form */
java.awt.EventQueue.invokeLater(new Runnable() {
@Override
public void run() {
try {
new SPPMainGUI().setVisible(true);
} catch (SQLException ex) {
Logger.getLogger(SPPMainGUI.class.getName()).log(Level.SEVERE, null, ex);
}
}
});
}
我不确定这是否正确,但没有更多错误。我的jTable还没有显示数据......我不确定为什么,但我想这个问题已经解决了,我就进入了下一个问题。感谢所有帮助。