我正在为12年级的IT课程做一个实用的评估任务。我正在努力使用代码来填充我的GUI中的jTable(来自swing控件)。我使用Netbeans作为IDE。数据库使用jdbc:odbc桥连接。这段代码在我的项目中的java类中。
**请注意,我在编码方面相对缺乏经验
这是我目前的代码(但它在我的jtable中没有输出) 如果你可以解决它,请解释你做了什么,或者如果你能,请给我代码,它将工作:)
db.setConnection();
Statement stmt = null;
try {
con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)}"
+ ";DBQ=src/TheChangeProjectDB.accdb");
stmt = con.createStatement();
} catch (SQLException ex) {
JOptionPane.showMessageDialog(null, "Error: " + ex);
}
String sql = "SELECT * FROM KanyisaLearners";
try {
ResultSet rs = stmt.executeQuery(sql);
ResultSetMetaData md = rs.getMetaData();
int columns = md.getColumnCount();
for (int i = 1; i <= columns; i++) {
columnNames.addElement(md.getColumnName(i));
}
while (rs.next()) {
Vector row = new Vector(columns);
for (int i = 0; i <= columns; i++) {
row.addElement(rs.getObject(i));
}
data.addElement(row);
}
rs.close();
stmt.close();
} catch (Exception e) {
System.out.println(e);
}
JTable table = new JTable(data, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane);
JPanel buttonPanel = new JPanel();
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
KanyisaHoofskerm frame = new KanyisaHoofskerm();
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
frame.pack();
frame.setTitle("Learners");
frame.setVisible(true);
答案 0 :(得分:1)
鉴于这一点:
JScrollPane scrollPane = new JScrollPane(table);
getContentPane().add(scrollPane); // your class extends from JFrame?
JPanel buttonPanel = new JPanel();
getContentPane().add(buttonPanel, BorderLayout.SOUTH);
然后是这些:
KanyisaHoofskerm frame = new KanyisaHoofskerm(); // new frame local variable
frame.setDefaultCloseOperation(EXIT_ON_CLOSE);
...
frame.setVisible(true);
我强烈怀疑您的课程从您添加课程的JFrame延伸到。如果是这样,那么你不会让它可见,而是一个新的frame
局部变量。因此,根本没有显示表格,至少就我所见。
如果是这种情况,请查看this question with the same problem和Extends JFrame vs. creating it inside the the program主题。
关于进行数据库调用的代码:
答案 1 :(得分:0)
您的代码在添加行时给出异常。 通过使用描述符而不是使用索引来更改代码。
while (rs.next()) {
Vector row = new Vector(columns);
for (int i = 0; i < columns; i++) {
row.addElement(rs.getObject(columnNames.get(i)));
}
data.addElement(row);
}