# Nullpointer



## AndreasS (22. Jan 2005)

Hallo, 

habe folgendes Problem:

Habe diese beiden Klassen:

```
import javax.swing.table.*;      // Klasse AbstractTableModel
import java.sql.*;               // JDBC

public class MyTableModel extends AbstractTableModel {
  
   Connection conn;          // Verbindungsobjekt
   String[] columnNames;     // Die Spaltennamen der Tabelle
   Object[][] data;          // Alle Daten der Tabelle
   int nRows, nColumns;      // Anzahl der Records und Attribute
   Statement state = null;
   
   public MyTableModel(Connection c) throws java.sql.SQLException {
  	conn = c;
		
      String query = "SELECT * FROM Kunden";
      ResultSet rset = state.executeQuery(query);
      
      ResultSetMetaData meta = rset.getMetaData();
      
      // Setze Spalten (Anzahl und Name)
      nColumns = meta.getColumnCount();
      columnNames = new String[nColumns];
      for (int i = 0; i < nColumns; i++)
         columnNames[i] = meta.getColumnName(i+1); 
      // Setze Ergebnisrecords (Anzahl und Inhalt)
      rset.last();
      nRows = rset.getRow();
      rset.beforeFirst();
      data = new Object[nRows][nColumns];
      int i = 0;
      while (rset.next()) {
         for (int j = 0; j < nColumns; j++)
            data[i][j] = new String(rset.getString(j+1).trim());
         ++i;
      }
   }
      
   public void print() {
       //System.out.println("Tabellenname = " + tableName);
       for (int i = 0; i < nColumns; i++) {
          System.out.print(columnNames[i]);
          System.out.print("  ");
       }
       System.out.println();

       for (int i = 0; i < nRows; i++) {
          for (int j = 0; j < nColumns; j++) {
             System.out.print(data[i][j]);
             System.out.print("  ");
          }
          System.out.println();
       }
   }
   // Abstrakte 
   public int getRowCount() {
      return nRows;
   }
   public int getColumnCount() {
      return nColumns;
   }
   public String getColumnName(int col) {
      return columnNames[col];
   }
   public Object getValueAt(int rowIndex, int columnIndex) {
      return data[rowIndex][columnIndex];
   }
}

import java.awt.event.*;         
import javax.swing.*;           
import java.sql.*;               
import java.io.*;               
import java.util.*;            

public class Test{
	
	private MyTableModel model;
	
	public static void main(String[]args)throws java.sql.SQLException{
	Connection conn = null;
	Statement state = null;
	String url = "jdbc:odbc:Verwaltung";
	
	try {
			Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
			conn = DriverManager.getConnection(url);
			state = conn.createStatement();
		}
		catch (Exception e) {
			System.out.println("DB kann nicht initialisiert werden");
			e.printStackTrace();
	}
    
    MyTableModel model = new MyTableModel(conn);
    model.print();
	
    JFrame frame = new JFrame("Anzeige Tabelle Kunden");
    frame.addWindowListener(new WindowAdapter() {
          public void windowClosing(WindowEvent we) {
             System.exit(0);
          }
    } );
    frame.getContentPane().add(new JScrollPane(new JTable(model)));
    frame.pack();
    frame.setVisible(true);
  }
}
```

Wenn ich "Test" ausführe, bekomme ich immer einen NullPointer: "Exception in thread "main" java.lang.NullPointerException at MyTableModel<init><MyTableModel.java:17> at Test.main <Test.java: 28>"

Was mache ich falsch?

Bin für jede Hilfe dankbar.

Gruß Andi


----------



## foobar (22. Jan 2005)

Ist doch klar, du hast überhaupt kein Statement erzeugt:

```
Statement state = null;
   
   public MyTableModel(Connection c) throws java.sql.SQLException {
     conn = c;
      this.state= this.conn.createStatement( "SELECT * FROM Kunden" );
      ResultSet rset = state.executeQuery(query);
```


----------



## David_Ilm (16. Feb 2005)

Ich habe das selbe Problem mit der java.lang.NullPointerException

Nur das es bei mir so idt bei manchen Tabellen geht es und bei manchen nicht.

Nun hab ich geschaut was bei den Tabellen wo es nicht geht anders ist und siehe da bei den Tabellen wo es nicht geht steht immer in irgeneiner spallte "Null" in der Datenbank bei den anderen nicht und da gehts ja auch.

Was kann cih tun???????


----------



## foobar (16. Feb 2005)

Ich vermute mal du holst dir über das ResultSet einen Wert, der null ist ,und versuchst Methoden darauf aufzurufen. Um das zu verhindern mußt du zuerst mit wasNull() prüfen ob die letzte Spalte null geliefert hat.
Guckst du hier http://java.sun.com/j2se/1.4.2/docs/api/java/sql/ResultSet.html

Ansosnten poste doch mal etwas Code.


----------



## Gast (16. Feb 2005)

foobar 

ich hab mich mal nen bischen kundig gemacht über was null hab auch nen bsp.: gefunden und es versucht umzustezen 

Auschnitt aus meinem Code:

result  = oResultSet.getString("Field");
         if (!result.wasNull()){result="null";}
         result2 = (result2 + result + "\"\"");

bekomme aber beim Comillieren nen Fehler: cannot resolve symbol methode wasnull()


----------



## Bleiglanz (16. Feb 2005)

lustig, javascript:quote_last kommt offensichtlich mit den  "\"\"" durcheinander...



> bekomme aber beim Comillieren nen Fehler: cannot resolve symbol methode wasnull()


Was jetzt? wasnull() oder wasNull()?

welche jvm?


----------



## Gast (16. Feb 2005)

Was Jetzt?
wasNull() meinte ich

JVM
Nutze die aus jre1.5.0


----------



## Bleiglanz (16. Feb 2005)

ahhhh verlesen

wasNull gehört zum ResultSet und bezieht sich immer auf den aktuellen Zustand (das ist der letzte getXXX abruf)

=> bei dir also oResult.wasNull()

sorry


----------

