2013-01-15 40 views
0

添加colums可以工作,但当我想将存储在mysql数据库中的列的数据添加到jtable时,卡住了。它要求一个对象vector[][]但我不知道该给什么将数据从Mysql表中添加到jtable表中

Connection con; 
DefaultTableModel model = new DefaultTableModel(); 

public Hoofdscherm() { 
    initComponents(); 
    uitvoerSpelers.setModel(model); 

    try { 
     con = DriverManager.getConnection("jdbc:mysql://localhost/fullhouse", "root", "hamchi50985"); 

     // selecteer gegevens uit fullhouse.speler tabel 
     PreparedStatement stat = con.prepareStatement("SELECT * FROM fullhouse.speler"); 

     // sla deze GEGEVENS op in een resultset 
     ResultSet resultaat = stat.executeQuery(); 

     // haal alle kolomnamen op PUUR VOOR DE MODEL VAN JTABLE 
     ResultSetMetaData data = resultaat.getMetaData(); 

     String[] colum = new String[15]; 
     for (int i = 1; i < data.getColumnCount(); i++) { 
      colum[i] = data.getColumnName(i); 
      model.addColumn(colum[i]); 
      while (resultaat.next()) { 
       Object[] gegevens = new String[] {resultaat.getString(1)}; 
       model.addRow(gegevens[0]); 
      } 
     }  
    } catch (SQLException ex) { 
     JOptionPane.showMessageDialog(null, ex); 
    } 
} 

回答

1

我认为你需要这样的东西。

注意 1.还要将您的列分开添加到结果集数据。就像我在下面的代码中展示的那样。

Vector<String> rowOne = new Vector<String>(); 
rowOne.addElement("R1C1"); 
rowOne.addElement("R1C2"); 

Vector<String> rowTwo = new Vector<String>(); 
rowTwo.addElement("R2C1"); 
rowTwo.addElement("R2C2"); 

Vector<String> cols = new Vector<String>(); 

Vector<Vector> vecRow = new Vector<Vector>(); 
vecRow.addElement(rowOne); 
vecRow.addElement(rowTwo); 
cols.addElement("Col1"); 
cols.addElement("Col2"); 
JTable table = new JTable(vecRow, cols); 

编辑

为您的方便和要求,你可以按照下面的代码结构。

Vector<String> rows = new Vector<String>(); 
Vector<Vector> dBdata = new Vector<Vector>(); 

// Add Columns to table 
for (int i = 1; i < data.getColumnCount(); i++) { 
    colum[i] = data.getColumnName(i); 
    model.addColumn(colum[i]); 
} 

while (resultaat.next()) { 
    // add column data to rows vector 
      // Make sure that all data type is in string because of generics 
    rows.add(resultaat.getString("columnName1")); 
    rows.add(resultaat.getString("columnName2")); 
    rows.add(resultaat.getString("columnName3")); 

    // add whole row vector to dBdata vector 
    dBdata.addElement(rows); 
} 
model.addRow(dBdata); 

Vector实现了一个动态数组。它与ArrayList类似,但有两点区别:

  1. 矢量是同步的。

  2. Vector包含很多遗留方法,它们不是集合框架的一部分。

Class Vector Javadoc

我希望这会帮助你。

+1

但我需要在1开始循环,因为data.getColumnCount返回第一列为1 ...不是吗?但是,什么是矢量?看起来像我的arraylist – hamchi

+0

@hamchi你是对的'getColumnCount()'是基于1而不是基于0的。我更新了答案。 – Smit

1

该行model.addRow(gegevens[0]);不正确。 你应该做这样的事情:

String[] colum = new String[15]; 
    for (int i = 1; i < data.getColumnCount(); i++) { 
     colum[i] = data.getColumnName(i); 
     model.addColumn(colum[i]); 
     while (resultaat.next()) { 
      Object[] gegevens = new String[] {resultaat.getString(1)}; 
      model.addRow(gegevens); 
     } 
    } 

你也需要检查DefaultTableModel

根据的DefaultTableModel的文档:

这是使用向量的向量TableModel的一个实现 来存储单元值对象。