我确定获取了数据库值,但它仍然无法显示。 Netbeans 8.1 jdk 1.8.0.74 jre 1.8.0.91
...
...
//---------------------------------DataBase------------------------------------------------------------
}
public void valuetable()
{
try
{
Class.forName("com.mysql.jdbc.Driver");
conn = java.sql.DriverManager.getConnection(url, user, password);
连接到mysql没问题。
sql = "SELECT * FROM hams";
ps = conn.prepareStatement(sql);
java.util.Vector tableContent = new java.util.Vector();
java.util.Vector columnName = new java.util.Vector();
metaData = ps.getMetaData();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++)
{
columnName.add(metaData.getColumnName(i));
}
rs = ps.executeQuery();
while (rs.next())
{
java.util.Vector rowData = new java.util.Vector();
for (int i = 1; i <= columnCount; i++)
{
rowData.add(rs.getObject(i));
}
tableContent.add(rowData);
}
tableModel = new HAMS(tableContent, columnName);
jScrollPane1 = new javax.swing.JScrollPane(jTable1);
获取所有数据库值
}
catch(Exception e)
{
javax.swing.JOptionPane.showMessageDialog(null, e.getMessage());
}
}
}
答案 0 :(得分:0)
您可能会错过表格模型中基础数据已更改的通知。尝试添加以下行
tableModel fireTableDataChanged();
行后
jScrollPane1 = new javax.swing.JScrollPane(jTable1);
答案 1 :(得分:0)
谢谢回复,我试着添加
tableModel.fireTableDataChanged();
jScrollPane1 = new javax.swing.JScrollPane(jTable1);
但是jTable1仍然为空,并显示错误,如图片。 Error
答案 2 :(得分:0)
自己解决问题,解决方案是基于java书中的例子 首先,在类块中,添加以下代码:
public MonitorInterface(java.util.Vector data, java.util.Vector columnNames)
{
super(data, columnNames);
}
public boolean isCellEditable(int row, int col)
{
return false;
}
static final int SCROLL = java.sql.ResultSet.TYPE_SCROLL_INSENSITIVE;
static final int UPDATABLE = java.sql.ResultSet.CONCUR_UPDATABLE;
第二,方法:
public void tablevalue()
{
java.util.Vector col = new java.util.Vector();
java.util.Vector data = new java.util.Vector();
try
{
Thread.sleep(100);
//Connect MySQL JDBC driver
Class.forName("com.mysql.jdbc.Driver");
//Connect to host
conn = DriverManager.getConnection(url, user, password);
//Connect to DB
ps = conn.prepareStatement(sql);
//Get row and column info
metaData = ps.getMetaData();
int columnCount = metaData.getColumnCount();
for (int i = 1; i <= columnCount; i++)
{
col.add(metaData.getColumnName(i));
}
rs = ps.executeQuery();
while (rs.next())
{
java.util.Vector rowData = new java.util.Vector();
for (int i = 1; i <= columnCount; i++)
{
rowData.add(rs.getObject(i));
}
data.add(rowData);
}
tableModel = new MonitorInterface(data, col);
jTable1 = new javax.swing.JTable(tableModel);
jScrollPane1.setViewportView(jTable1);
jTable1.setFillsViewportHeight(true);
// Close all connect
rs.close();
ps.close();
conn.close();
}
catch (Exception e)
{
e.printStackTrace();
}
}
}
最后,数据库值显示在JTable中,但在数据库插入新数据时无法自动更新JTable。
jTable1.validate();
jTable1.updateUI();
jTable1.repaint();
tableModel.fireTableDataChanged();
我试试这些方法,但仍无效果。
答案 3 :(得分:0)
我为B类中的show database值创建了一个方法,并在此方法的任何位置插入此代码,
System.out.println("123");
在B类中调用此方法,它只执行一次,即使数据库值发生变化,也无法显示最新值,因此,我尝试在C类中调用此方法,它有效,在数据库值更改时显示最新值
我认为问题是:
抱歉我的游泳池英语。