4

に SQLdata を表示したいjtable。最初のステップは、次のものを作成することtablemodelです。

public DefaultTableModel createTableModel(String sqlStatement) {
    int rowCount       = 0;
    int colCount       = 0;
    Vector data        = new Vector();
    Vector columnnames = new Vector();
    String sql = sqlStatement;
    try {
        open();

        ResultSet rs = befehl.executeQuery(sql);
        ResultSetMetaData metaData = rs.getMetaData();
        for(int i = 1; i<=metaData.getColumnCount();i++)
            columnnames.add(metaData.getColumnName(i));
        DefaultTableModel model = new DefaultTableModel(null,columnnames);
        close();
        return model;
    } catch (SQLException e) {
        e.printStackTrace();
        close();
        return null;
    }
}

SQL ステートメントがテーブル全体を選択する場合、これは正常に機能します:SELECT* FROM test;が、最初の 2 つの列のみを表示したい場合はSelect ColumnName1, ColumName2 from test;ArrayIndexOutOfBoundsException. 私はいつもSQLステートメントに依存する、に依存するcolumncountと考えていました。resultSetどうすれば正しいものを取得できますcolumncountか?

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: 4 >= 2
at java.util.Vector.elementAt(Vector.java:470)
at javax.swing.table.DefaultTableColumnModel.getColumn(DefaultTableColumnModel.java‌​:294)
at sun.swing.SwingUtilities2.convertColumnIndexToModel(SwingUtilities2.java:1841)
at javax.swing.JTable.convertColumnIndexToModel(JTable.java:2585)
at javax.swing.JTable.getValueAt(JTable.java:2720) at Main.KassePanel.<init>(KassePanel.java:186)
at Main.Main.<init>(Main.java:36) at Main.Main.main(Main.java:20)
4

1 に答える 1