Oracle NullPointerException bei select mit Null Values

dior

Bekanntes Mitglied
Hallo,

ich habe ein einfaches JavaFX Programm welches mir einfach alle Werte aus einem Select in eine TableView schreibt. Das funktioniert auch ohne Probleme solange ich keine Spalte mit Null Values dabei habe.
Wenn doch kommt eine NullPointerException.

Java:
package FX;

import java.sql.Connection;
import java.sql.ResultSet;
import javafx.application.Application;
import javafx.beans.property.SimpleStringProperty;
import javafx.beans.value.ObservableValue;
import javafx.collections.FXCollections;
import javafx.collections.ObservableList;
import javafx.scene.Scene;
import javafx.scene.control.TableColumn;
import javafx.scene.control.TableColumn.CellDataFeatures;
import javafx.scene.control.TableView;
import javafx.stage.Stage;
import javafx.util.Callback;

/**
*
* @author Narayan
*/

public class DynamicTable extends Application{

    //TABLE VIEW AND DATA
    private ObservableList<ObservableList> data;
    private TableView tableview;

    //MAIN EXECUTOR
    public static void main(String[] args) {
        launch(args);
    }

    //CONNECTION DATABASE
    public void buildData(){
          Connection c ;
          data = FXCollections.observableArrayList();
          try{
            c = Stromobjekte._DB_Connection.getConnection();
            //SQL FOR SELECTING ALL OF CUSTOMER
           
            String SQL = "SELECT id, num, control from table1 where cable_num like '1/8'";
            //ResultSet
            ResultSet rs = c.createStatement().executeQuery(SQL);

            /**********************************
             * TABLE COLUMN ADDED DYNAMICALLY *
             **********************************/
            for(int i=0 ; i<rs.getMetaData().getColumnCount(); i++){
                //We are using non property style for making dynamic table
                final int j = i;               
                TableColumn col = new TableColumn(rs.getMetaData().getColumnName(i+1));
                col.setCellValueFactory(new Callback<CellDataFeatures<ObservableList,String>,ObservableValue<String>>(){                   
                    public ObservableValue<String> call(CellDataFeatures<ObservableList, String> param) {                                                                                             
                        return new SimpleStringProperty(param.getValue().get(j).toString());                       
                    }                   
                });
              
                tableview.getColumns().addAll(col);
                System.out.println("Column ["+i+"] ");
            }

            /********************************
             * Data added to ObservableList *
             ********************************/
            while(rs.next()){
                //Iterate Row
                ObservableList<String> row = FXCollections.observableArrayList();
                for(int i=1 ; i<=rs.getMetaData().getColumnCount(); i++){
                    //Iterate Column
                    row.add(rs.getString(i));
                }
                System.out.println("Row [1] added "+row );
                data.add(row);

            }

            //FINALLY ADDED TO TableView
            tableview.setItems(data);
          }catch(Exception e){
              e.printStackTrace();
              System.out.println("Error on Building Data");            
          }
      }

   
      @Override
      public void start(Stage stage) throws Exception {
        //TableView
        tableview = new TableView();
        buildData();

        //Main Scene
        Scene scene = new Scene(tableview);       

        stage.setScene(scene);
        stage.show();
      }
}
 
Moin,

ich habe ein einfaches JavaFX Programm welches mir einfach alle Werte aus einem Select in eine TableView schreibt. Das funktioniert auch ohne Probleme solange ich keine Spalte mit Null Values dabei habe.
Wenn doch kommt eine NullPointerException.
das ist doch auch Sinn und Zweck der Übung ..... 🙄

Was ist denn jetzt deine Frage ??

Gruß Klaus
 
Wieso Sinn und Zweck der Übung?
Wenn ich das Ergebnis des Select in einer Tabelle stehen haben will, und in einer Spalte nix steht dann will ich ja trotzdem die Tabelle mit den Werten befüllen.
In den Feldern die in der DB NULL haben soll halt nix drinstehen...
 
Schon klar, aber wenn Du dann versuchst im Programm die NULL-Werte zu verwenden, knallt es halt!
Du musst es dann entsprechend behandeln ...
Bspw. mit "if( ... ! NULL ) ..."

Wobei genau fliegt die NPE denn?
Post erstmal den StackTrace !

Gruß Klaus
 
Ich würde sagen bei "row.add(rs.getString(i));" liegt der Fehler.
Könntest ja mal folgendes probieren:

Object o = rs.getObject(i);
row.add(o == null ? "" : o.toString());
 

Zurück
Oben