kostenloser Webspace werbefrei: lima-city


Warum funktioniert der Code nicht?

lima-cityForumProgrammiersprachenJava

  1. Autor dieses Themas

    ork

    ork hat kostenlosen Webspace.

    Hallo,

    ich versuche ein Tabellenmodell zu erstellen, das bei Angabe von MySQLDaten die entsprechende Tabelle zaubert. Allerdings bekomme ich eine NUllPointerException in der Zeile:

    this.data.add(rs.getObject(this.columnNames));

    was ist falsch?

    import lib.silix.basic.error.Error;
    import lib.silix.basic.log.Logger;
    import javax.swing.table.AbstractTableModel;
    import java.sql.*;
    import java.util.Vector;
    
    public class MySQLTableModel extends AbstractTableModel {
        
        private Error error;
        private Logger log;
        private String[] columnNames;
        private Vector[] data;
        private String host, user, password, database, table;
        private Connection con;
        private Statement stmt;
        private ResultSet rs;
        private ResultSetMetaData metadata;
        
        public MySQLTableModel() {
            this("localhost","root","", "mysql", "user");
        }
        
        public MySQLTableModel(String host, String user, String password, String database, String table) {
            this.error = new Error();
            this.log = new Logger();
            
            this.log.log("Log created.");
            
            this.host = host;
            this.user = user;
            this.password = password;
            this.database = database;
            this.table = table;
            
            try {
                Class.forName("com.mysql.jdbc.Driver");
            }
            catch(ClassNotFoundException cnfex) {
                error.error("MySQLTableModel", "MySQLDriver not found.");
                log.log("Error thrown because of a not found driver.");
                log.log(cnfex.getMessage());
                log.log("Exit programm...");
                System.exit(1);
            }
            
            try {
                this.con = DriverManager.getConnection("jdbc:mysql://"+host+"/"+database, user, password);
                this.stmt = con.createStatement();
            }
            catch(SQLException sqlex) {
                error.error("MySQLTableModel", "Couldn't create connection or statement.");
                log.log("Couldn't create connection or statement.");
                log.log(sqlex.getMessage());
                log.log("Exit programm...");
                System.exit(1);
            }
            
            try {
                this.rs = stmt.executeQuery("SELECT * FROM "+table);
                this.metadata = this.rs.getMetaData();
                this.columnNames = new String[this.metadata.getColumnCount()];
                
                data = new Vector[this.metadata.getColumnCount()];
                
                for(int i=0; i< this.metadata.getColumnCount(); i++) {
                    this.columnNames[i] = this.metadata.getColumnLabel(i+1);
                }
                
                while (rs.next()) {
                    for (int i = 0; i < this.metadata.getColumnCount(); i++) {
                        this.data[i].add(rs.getObject(this.columnNames[i]));
                    }
                }
            }
            catch(SQLException sqlex) {
                error.error("MySQLTableModel", "Couldn't get the result.");
                log.log("Couldn't get the resul.t");
                log.log(sqlex.getMessage());
                log.log("Exit programm...");
                System.exit(1);
            }
            
        }
        
        public int getColumnCount() {
            return columnNames.length;
        }
    
        public int getRowCount() {
            return data.length;
        }
    
        @Override
        public String getColumnName(int col) {
            return columnNames[col];
        }
    
        public Object getValueAt(int row, int col) {
            return data[col].elementAt(row);
        }
    
    }
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Hab mich mal durchgequält.
    Also, in Zeile 63 steht:

    data = new Vector

    Und in Zeile 71 dann glaub ich das auf was du dich beziehst:

    this.data

    Das hättest du vlt dazu schreiben sollen oben, dann wärs einfacher gewesen.

    Problem: Du versuchst die Elemente im VEctor aufzurufen, wie in einem Array. Das geht aber nicht.
    Entweder du wandelst den Vector in ein Array um, oder benutzt dessen Methoden.

    Z.b. hier elementAt (i)

    Probiers mal damit, bevor ich weiterdurchsuch.
  4. Nene, data is nen Vector-Array, von daher passt das schon...
    Du machst aber ein Array auf, daß so groß ist wie dein Ergebnis Spalten hat. Willst Du kein Array, daß so groß ist, wie das Ergebnis Zeilen hat ? Und ein Vector im Array hält dann die Spalten...

    // richtige Anzahl nehmen
                 data = new Vector[rowcount];
                
                for(int i=0; i< this.metadata.getColumnCount(); i++) {
                    this.columnNames[i] = this.metadata.getColumnLabel(i+1);
                }
                
                while (rs.next()) {
    // neuen Vec aufmachen
    Vector tempvec = new Vector();
                    for (int i = 0; i < this.metadata.getColumnCount(); i++) {
    //this.data[i].add(rs.getObject(this.columnNames[i]));
    // zeug in Vec schmeissen
    tempvec.add(rs.getObject(this.columnNames[i])); 
    // Vec zu Array adden                   
    this.data[rowzaehler] = tempvec;
                    }
                }


    Boah, kann man in diesem Eingabefeld besch***** editieren oder was ? Das wird wohl nix mit ordentlicher Einrückung...


    P.S.: Die NullPointerException gibts, weil es noch keinen Vector in deinem Array gibt. Das Array wird nicht automatisch mit den angegebenen Elementen gefüllt, also neuen Vector aufmachen...

    Beitrag geändert: 1.12.2008 12:08:43 von gcsdriver
  5. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!