问题从AccessDB中提取数据

时间:2015-04-07 05:13:14

标签: java swing jdbc jtable

我正在尝试从访问数据库中提取数据并使用以下代码填充

    String[] tableColumnsName = {"col 1","col 2","col 3"}; 
    DefaultTableModel aModel = (DefaultTableModel) jTable2.getModel();
    aModel.setColumnIdentifiers(tableColumnsName);
    try {
        // the query
        rs = db.query("SELECT * FROM Students ");
    } catch (SQLException ex) {
        Logger.getLogger(RegisterGUI.class.getName()).log(Level.SEVERE, null, ex);
    }

    // Loop through the ResultSet and transfer in the Model
    java.sql.ResultSetMetaData rsmd = null;
    try {
        rsmd = rs.getMetaData();
    } catch (SQLException ex) {
        Logger.getLogger(RegisterGUI.class.getName()).log(Level.SEVERE, null, ex);
    }
    //int colNo = rsmd.getColumnCount();
    try {
        while(rs.next()){
        Object[] objects = new Object[10];
        // tanks to umit ozkan for the bug fix!
        for(int i=0;i<10;i++){
        objects[i]=rs.getObject(i+1);
        }
        aModel.addRow(objects);
        }
    } catch (SQLException ex) {
        Logger.getLogger(RegisterGUI.class.getName()).log(Level.SEVERE, null, ex);
    }
    jTable2.setModel(aModel);
}//GEN-LAST:event_jButton2ActionPerformed

我可以从一个数据中提取数据。我怎么能从另一张桌子拉出来?

1 个答案:

答案 0 :(得分:2)

您对数据进行了大量假设,并在完成资源后保持资源处于打开状态。

首先,您应该使用ResultSetMetaData来构建TableModel列信息,然后您应该使用它来构建ResultSet的行数据,例如......

DefaultTableModel aModel = new DefaultTableModel();
try (ResultSet rs = db.query("SELECT * FROM Students ")) {
    ResultSetMetaData rsmd = rs.getMetaData();
    for (int col = 0; col < rsmd.getColumnCount(); col++) {
        aModel.addColumn(rsmd.getColumnName(col + 1));
    }

    while (rs.next()) {
        Object[] value = new Object[rsmd.getColumnCount()];
        for (int col = 0; col < rsmd.getColumnCount(); col++) {
            value[col] = rs.getObject(col + 1);
        }
        aModel.addRow(value);
    }
} catch (SQLException ex) {
    Logger.getLogger(RegisterGUI.class.getName()).log(Level.SEVERE, null, ex);
}
jTable2.setModel(model);

现在,我将构建一个实用程序方法,可以获取您的查询(或表名)并返回TableModel