作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我想在 JTable 中显示来自 MySQL 的数据,但只显示了表的最后一行,其他什么也没有。请帮帮我。我知道我有一个问题,因为 jt = new JTable(data, columns) 每次都为每一行创建一个新表(删除以前的)但我找不到正确的选项。
public class Test2 extends JPanel {
static final String USERNAME = "root";
static final String PASSWORD = "root";
static final String CONN_STRING = "jdbc:mysql://localhost:3306/mydbtest?useSSL=false";
JTable jt;
public Test2 () {
try {
Connection conn;
conn = DriverManager.getConnection(CONN_STRING, USERNAME, PASSWORD);
Statement stmt = (Statement) conn.createStatement();
String query = "Select title, season, episode from movie";
ResultSet rs = stmt.executeQuery(query);
rs.beforeFirst();
while (rs.next()) {
String title = rs.getString("Title");
String season = rs.getString("Season");
String episode = rs.getString("Episode");
String[] columns = {"Title", "S", "E"};
String[][] data = {{title, season, episode}};
jt = new JTable(data, columns);
};
jt.setPreferredScrollableViewportSize(new Dimension(450, 63));
jt.setFillsViewportHeight(true);
JScrollPane jps = new JScrollPane(jt);
add(jps);
}
catch (Exception er) {System.err.println(er);}
}
public static void main(String[] args) {
JFrame jf = new JFrame();
Test2 t = new Test2();
jf.setTitle("Test");
jf.setSize(500,500);
jf.setVisible(true);
jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
jf.add(t);
}
}
最佳答案
你的问题在这里:
while (rs.next()) {
String title = rs.getString("Title");
String season = rs.getString("Season");
String episode = rs.getString("Episode");
String[] columns = { "Title", "S", "E" };
String[][] data = { { title, season, episode } };
jt = new JTable(data, columns); // *** you're making many JTables here!! ***
}
每次 while 循环循环时,您都会创建并丢弃一个新的 JTable 对象。异常发生在最后一次循环时,结果集最后一行的数据没有被丢弃,然后显示在最终创建的 JTable 中。要解决这个问题,要显示 JTable 中的所有 数据,您需要在 while 循环中整理所有结果集数据,然后将其添加到 JTable 中,这是最简单的方法这是创建一个表模型,这里是一个简单的 DefaultTableModel,在 while 循环之前,并将它填充到 while 循环内的每一行结果集数据中:
// create a table model with the appropriate column headers
// and with 0 rows (to start with)
String[] columnNames = {"Title", "Season", "Episode"};
DefaultTableModel tableModel = new DefaultTableModel(columnNames, 0);
while (rs.next()) {
String title = rs.getString("Title");
String season = rs.getString("Season");
String episode = rs.getString("Episode");
// create a single array of one row's worth of data
String[] data = { title, season, episode } ;
// and add this row of data into the table model
tableModel.addRow(data);
}
jt.setModel(tableModel); // place model into JTable
或者更好的是,将最后一行更改为:
jt = new JTable(tableModel); // to create a new JTable
关于java - 如何在JTable中显示来自MySQL的数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45896437/
我是一名优秀的程序员,十分优秀!