这是我的代码:
private void show(java.awt.event.ActionEvent evt) {
Connection conn = null;
String url = "jdbc:mysql://localhost:3306/";
String dbName = "phone";
String driver = "com.mysql.jdbc.Driver";
String userName = "root";
String password = "school";
try {
Class.forName(driver).newInstance();
conn = DriverManager.getConnection(url + dbName, userName, password);
PreparedStatement pStmt = conn.prepareStatement("SELECT * FROM contacts");
ResultSet rs = pStmt.executeQuery();
JFrame frame1 = new JFrame();
frame1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
frame1.setSize(300, 150);
frame1.setVisible(true);
while (rs.next() == true) {
Object rowData[][] = {{"Name"},
{"Phone"}};
Object columnNames[] = {"Column One", "Column Two"};
JTable table = new JTable(rowData, columnNames);
JScrollPane scrollPane = new JScrollPane(table);
frame1.add(scrollPane, BorderLayout.CENTER);
}
rs.close();
pStmt.close();
conn.close();
} catch (Exception ex) {
System.out.println(ex);
}
}
我想在单独的窗口中显示记录,但显示空白屏幕。有任何更正建议吗?
答案 0 :(得分:1)
Vector columnNames = new Vector();
Vector data = new Vector();
try{
Connection conn = null;
DriverManager.registerDriver(new oracle.jdbc.OracleDriver());
conn = DriverManager.getConnection(
"jdbc:oracle:thin:@localhost:1521:XE","yedal ","yedal121288");
Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("");
ResultSetMetaData meta=rs.getMetaData();
int columns = meta.getColumnCount();
for (int i = 1; i <= columns; i++)
{
columnNames.addElement( meta.getColumnName(i) );
}
while (rs.next())
{
Vector row = new Vector(columns);
for (int i = 1; i <= columns; i++)
{
row.addElement( rs.getObject(i) );
}
data.addElement( row );
}
rs.close();
stmt.close();
}
catch (SQLException ex) {
ex.printStackTrace();
}
t= new JTable(data, columnNames); t.setVisible(true);
TableColumn col;
for (int i = 0; i < t.getColumnCount(); i++)
{
col = t.getColumnModel().getColumn(i);
col.setMaxWidth(200);
}
JScrollPane scrollPane = new JScrollPane(t);
答案 1 :(得分:0)
你在while循环中创建了多个JTable,我认为这不是你想要做的,也不是你给它们的大小。您必须使用setPreferredSize或setSize方法设置JTable的大小:
tblObj.setPreferredSize(new Dimension(300,400));
你也可以为表内容传递true到setFillsViewportHeight方法以填充视口。
以下是有关如何使用JTable的链接:
答案 2 :(得分:0)
如果您查看控制台,我认为您会看到异常java.lang.ArrayIndexOutOfBoundsException
。 JTable
填充了一个包含两列的表模型,但是您使用一个只有一个数据的数组构建它。
请注意,因为在此异常发生之前将框架设置为可见,所以显示框架,组件被添加到框架中,但是当swing尝试绘制它时,它将失败。
如果您将测试数据替换为例如
Object rowData[][] = { { "Name", "Phone" }, { "Name2", "Phone2" } };
它会起作用(除非rs.next()
永远不变)。
答案 3 :(得分:0)
最好使用库文件rs2xml.jar。 将它包含在你的库中
首先使用jdbc创建与数据库的连接。 导入此 - &gt; import net.proteanit.sql.DbUtils;
String query ="select * from employee"; //let
pst = conn.prepareStatement(query);
rs = pst.executeQuery();
s.append (QueryArea.getText()).append("\n");
jTable.setModel(DbUtils.resultSetToTableModel(rs));
将抛出异常,因此请通过try catch语句处理它。 如果你有任何问题可以问。