JTable aktualisieren

ok, ich habe mal folgendes über 'AbstractTableModel' implementiert. scheitert aber noch an null-pointer-exec.

Code:
public class ArticCell_SQL_MyTableModel extends AbstractTableModel{

  ArticCell_ConnectionDB con = null;
  ArticCell_SQL_DB sqldb = null;
  ResultSet rSet = null;
  ResultSetMetaData rsmd = null;

  private int rowSize = 0;
  private int columnSize = 0;
  private Object[][] data = null;
  private String[] columnNames = null;

  /*Constructor*/
  public ArticCell_SQL_MyTableModel() {

  }

  /*Constructor*/
  public ArticCell_SQL_MyTableModel(int range_) {
    setResult(range_);
  }


  /*Liefert die Anzahl Spalten der Tabellenstruktur*/
  public int getColumnCount() { return columnSize; }

  /*Liefert die Anzahl Spalten der Tabellenstruktur*/
  public int getRowCount() { return rowSize;}

  /*Liefert den Inhalt aus der Tabellenstruktur am Platz (row,col)*/
  public Object getValueAt(int row, int col) { return data[row][col]; }

  /*Liefert Spaltenueberschrift am Platz (col)*/
  public String getColumnName(int col) { return columnNames[col]; }

  /*eschriften der Tabellen am Platz (col)*/
  public void setColumnNameAt(String titel, int col) { columnNames[col] = titel; }

  /*Schreiben eines Objektes in die Tabellenstruktur am Platz (row,col)*/
  public void setValueAt(Object val, int row, int col) { 
    fireTableCellUpdated(row, col); 
    data[row][col]=val; 
  }

  public void setResult(int range_){
    /*Verbindung zur DB herstellen, Statement initialisieren*/
    con = new ArticCell_ConnectionDB();
    sqldb = new ArticCell_SQL_DB();

    /*SQL-Query ausführen und ResultSet zurückholen */
    rSet = sqldb.getResultMySQLQuery(sqldb.setStatementMySQL(con.getConnectionMySQL()), "SELECT * FROM test WHERE db_time <= " + range_ + " ;");

    try {
      rsmd = rSet.getMetaData();
      /*Spaltenzahl ermitteln*/
      columnSize = rsmd.getColumnCount();
      /*Zeilen ermitteln*/
      rowSize = rSet.getRow();
    }
    catch (SQLException e) {
      e.printStackTrace();
    }

    /*Object-Array initialisieren*/
    data = new Object[rowSize][columnSize];

    int row = 0;

    try {

      /*Spaltenüberschriften setzen*/
      for (int i = 1; i <= columnSize; i++) {
        int col = i - 1;
        setColumnNameAt(rsmd.getColumnName(i), col); <-- java.lang.NullPointerException
      }

      /*Werte füllen*/
      while (rSet.next()) {

        for (int i = 1; i <= columnSize; i++) {
          int col = i - 1;
          setValueAt(rSet.getString(i), row, col); <-- java.lang.NullPointerException
        }
        row++;
      }
    } catch (SQLException e1) {
      e1.printStackTrace();
    }
  }
}

aufgerufen wird folgt:

Code:
TableModel model = new ArticCell_SQL_MyTableModel(40);
JTable table = new JTable();
table.setModel(model);
scrollPane = new JScrollPane(table);
jPanel7.add(scrollPane, BorderLayout.CENTER);

die execption sind im code gekennzeichnet. was muss ich ändern?

gondor(..)
 
setColumnNameAt(rsmd.getColumnName(i), col); <-- java.lang.NullPointerException

Dann ist wohl rsmd = null

setValueAt(rSet.getString(i), row, col); <-- java.lang.NullPointerException

Und hier ist dann rSet = null.

Das heisst Deine Logik mit

rSet = sqldb.getResultMySQLQuery(sqldb.setStatementMySQL(con.getConnectionMySQL()), "SELECT * FROM test WHERE db_time <= " + range_ + " ;");

try {
rsmd = rSet.getMetaData();

usw. klemmt hier wohl.
 
so, es funktioniert :D

Code:
public class ArticCell_SQL_MyTableModel extends AbstractTableModel{      ArticCell_ConnectionDB con = null;    ArticCell_SQL_DB sqldb = null;    ResultSet rSet = null;    ResultSetMetaData rsmd = null;      private int rowSize = 0;    private int columnSize = 0;    private Object[][] data = null;    private String[] columnNames = null;      /*Constructor*/    public ArticCell_SQL_MyTableModel() {      }      /*Constructor*/    public ArticCell_SQL_MyTableModel(int range_) {      setResult(range_);    }        /*Liefert die Anzahl Spalten der Tabellenstruktur*/    public int getColumnCount() { return columnSize; }      /*Liefert die Anzahl Spalten der Tabellenstruktur*/    public int getRowCount() { return rowSize;}      /*Liefert den Inhalt aus der Tabellenstruktur am Platz (row,col)*/    public Object getValueAt(int row, int col) { return data[row][col]; }      /*Liefert Spaltenueberschrift am Platz (col)*/    public String getColumnName(int col) { return columnNames[col]; }      /*eschriften der Tabellen am Platz (col)*/    public void setColumnNameAt(String titel, int col) { columnNames[col] = titel; }      /*Schreiben eines Objektes in die Tabellenstruktur am Platz (row,col)*/    public void setValueAt(Object val, int row, int col) { fireTableCellUpdated(row, col); data[row][col]=val; }      public void setResult(int range_){      /*Verbindung zur DB herstellen, Statement initialisieren*/      con = new ArticCell_ConnectionDB();      sqldb = new ArticCell_SQL_DB();        /*SQL-Query ausführen und ResultSet zurückholen */      rSet = sqldb.getResultMySQLQuery(sqldb.setStatementMySQL(con.getConnectionMySQL()), "SELECT * FROM test WHERE db_time <= " + range_ + " ;");        try {        rsmd = rSet.getMetaData();        /*Spaltenzahl ermitteln*/        columnSize = rsmd.getColumnCount();          rSet.first();        rSet.last();        /*Zeilen ermitteln*/        rowSize = rSet.getRow();        rSet.first();      }      catch (SQLException e) {        e.printStackTrace();      }        /*Object-Array initialisieren*/      data = new Object[rowSize][columnSize];      /*Spaltenüberschriften-Array initialisieren*/      columnNames = new String[columnSize];        int row = 0;        try {          /*Spaltenüberschriften setzen*/        for (int i = 1; i <= columnSize; i++) {          int col = i - 1;          setColumnNameAt(rsmd.getColumnName(i), col);        }          /*Werte füllen*/        while (rSet.next()) {            for (int i = 1; i <= columnSize; i++) {            int col = i - 1;            setValueAt(rSet.getString(i), row, col);          }          row++;        }      } catch (SQLException e1) {        e1.printStackTrace();      }    }  }

vielen dank für deine hilfe @snape

gondor(..)
 
Original geschrieben von gondor
>so, es funktioniert :D

Prima.

>vielen dank für deine hilfe @snape
>gondor(..)

Dafür gibt es ja dieses Forum. ;)

BTW ein Tip noch:
Ich weiss nicht wie Du das schaffst, aber es ist SEHR unleserlich, wenn Du hier den kompletten Code einer Klasse/Methode in eine Zeile legst.
Code:
class MyClass
{
 MyClass()
 {
   System.out.println("Hallo Welt");
 }
}

sieht doch irgendwie besser aus als das hier:

Code:
class MyClass { MyClass() { System.out.println("Hallo Welt"); } }

Oder?
 
Zurück