我正在尝试从数据库中检索数据并在JTable中显示它。我正在使用NetBeans并且在调试中我注意到实际上检索了来自数据库的数据并且数据填充在数组“Appointment”中,但不知何故它通过这些代码行(应该将所有内容插入到表中)并停止,就像一切都没有任何错误,尽管在GUI中没有任何显示。非常感谢您的帮助。
private void search(){
try{
Model_Customer[] appointment = Controller_ManageCustomer.FindCustomers(Searchtxt.getText());
resultModel.setRowCount(0);
for(int i = 0; i < appointment.length; i++)
resultModel.insertRow(i,new Object[]{appointment[i].GetID(),appointment[i].GetFName(), appointment[i].GetLName(), appointment[i].GetRegistration(), appointment[i].GetMake(), appointment[i].GetModel(), appointment[i].GetEngine(), appointment[i].GetYear(), appointment[i].GetMileage(), appointment[i].GetType(), appointment[i].GetDate(), appointment[i].GetTime()});
}catch(Exception ex){
JOptionPane.showMessageDialog(this,ex.getMessage(),"Error",JOptionPane.ERROR_MESSAGE);
}
}
DefaultTableModel resultModel = new DefaultTableModel();
在NetBeans Design中,表代码为:
tableresult = new javax.swing.JTable(resultModel);
tableresult.setModel(new javax.swing.table.DefaultTableModel(
new Object [][] {
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null},
{null, null, null, null, null, null, null, null, null, null}
},
new String [] {
"ID", "FName", "LName", "Registration", "Make", "Model", "Engine", "Type", "Date", "Time"
}
));
jScrollPane1.setViewportView(tableresult);
答案 0 :(得分:1)
我正在做的是从database
检索数据并使用JTable
在Netbeans
上显示,这就是:
//全球宣言
private Vector<Vector<String>> data; //used for data from database
private Vector<String> header; //used to store data header
//向JTable显示信息
data = get();
//create header for the table
header = new Vector<String>();
header.add("Column1");
header.add("Column2");
...
model=new DefaultTableModel(data,header);
table = new JTable(model);
这将帮助您从数据库中获取数据
get(){
Vector<Vector<String>> doublevector = new Vector<Vector<String>>();
Connection conn = dbConnection();//Your Database connection code
PreparedStatement pre1 = conn.prepareStatement("select * from Table");
ResultSet rs1 = pre1.executeQuery();
while(rs1.next())
{
Vector<String> singlevector = new Vector<String>();
singlevector.add(rs1.getString(1));
singlevector.add(rs1.getString(2));
....
doublevector.add(singlevector);
}
return doublevector;
}
答案 1 :(得分:0)
你能做的很简单: 使用null参数定义jtable的模型,而不是将此模型添加到Jtable,在其他部分,当您想要从数据库中检索数据时,您必须声明两个表,第一个将包含表n的标题,第二个将具有两个维度并且将包含您需要的数据,而不是必须将表设置为jtable模型的参数,而不是将此模型添加到jtable :)如果您不太了解这些代码: 此方法使用树参数从数据库中检索数据: sqlcounter查询计算从select查询返回的行数 sql查询从数据库中选择数据 NumberOfRowsToShowInTables是表中显示的行数,可以是0或10个其他数字,如您所愿 Rscounter是查询sqlcounter的语句stmt执行的Resultset RsSelecting是查询sql的语句执行的结果集 具有二维的字符串数据表 header是数据库
中表的冒号的名称RS
public void SelectData(String sqlcounter ,String sql,int NumberOfRowsToShowInTables){
if(NumberOfRowsToShowInTables==0){
NumberOfRowsToShowInTables=10;
}
try {
RsCounter=stmt.executeQuery(sqlcounter);
System.out.println(sqlcounter);
while(RsCounter.next()){
countrow=RsCounter.getInt("COUNTR");
System.out.println(countrow+"\n");
if(NumberOfRowsToShowInTables>countrow)
NumberOfRowsToShowInTables=countrow;
sql=sql+" LIMIT "+NumberOfRowsToShowInTables+" OFFSET "+(countrow-NumberOfRowsToShowInTables);
countrow=NumberOfRowsToShowInTables;
}
System.out.println(sql);
RsSelecting = stmt.executeQuery(sql);
data=new String[countrow][RsSelecting.getMetaData().getColumnCount()];
header= new String[RsSelecting.getMetaData().getColumnCount()];
i=0;
while(RsSelecting.next()){
for(j=0;j<RsSelecting.getMetaData().getColumnCount();j++){
data[i][j]=(RsSelecting.getString(j+1));
header[j]=RsSelecting.getMetaData().getColumnName(j+1);
System.out.print(data[i][j]+"\n");
}
i++;
}
i=j=0;
} catch (SQLException ex) {
ex.printStackTrace();
Logger.getLogger(Connect.class.getName()).log(Level.SEVERE, null, ex);
}
}
比使用getter方法获取数据和标题
public String [][] getData(){
return data;
}
public String [] GetHeader(){
return header;
}
之后使用then方法将这些值设置为模型的参数
jTable1 = new javax.swing.JTable();
model = new DefaultTableModel(data, header)
jTable1.setModel(model);
我希望它有用