NULL String

Status
Nicht offen für weitere Antworten.

huja

Mitglied
Hallo, ich habe immer wieder das Problem das bei meinen Datenbankabfragen der Fehler Null String auftaucht. Ist ja eigentlich auch richtig weil ich auf Tabellen gehe wo Felder nix enthalten, jedoch bricht die Abfrage dort ab. Ich habe schon von Möglichkeiten wie wasNull gelesen. Aber das klappt leider nicht so richtig. Es wäre sehr schön wenn mir jemand mal auf die Sprünge helfen könnte wie eine Bedingung aussehen könnte die diesen Fehler abfängt. Hier mal mein Quellcode:

Code:
import java.sql.*;
import java.awt.*;
import java.awt.event.*;

public class SqlDirektSelect extends Frame implements ActionListener{
    //GUI Komponenten definieren
    Button ausführen = new Button("Ausführen!");
    TextArea ein = new TextArea("Select",3,80);
    TextArea ausgabe = new TextArea();
    TextField database = new TextField("ODBC-Datenbankname");
    TextField databaseUserName = new TextField("Username");
    TextField databasePassword = new TextField("Password");
    //DBMS Variablen
    Connection c;
    Statement s;

    
    public SqlDirektSelect(){
        super("SQL nur >Select< Direkt fuer LHH HANNOVER Version 0.02"); //Fensterbezeichnung
        Panel eingabe = new Panel(new BorderLayout());
        Panel knopf = new Panel(new FlowLayout(FlowLayout.LEFT));
        //Panel textFeld = new Panel(new FlowLayout(FlowLayout.RIGHT));
        knopf.add(database);
        knopf.add(databaseUserName);
        knopf.add(databasePassword);
        knopf.add(ausführen);
        eingabe.add(knopf, "North");
        //eingabe.add(textFeld, "North");
        eingabe.add(ein, "Center");
        add(eingabe, "North");
        add(ausgabe, "Center");
        addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});
        ausgabe.setEditable(false);
        ausführen.addActionListener(this);
        setSize(500,400);
        setVisible(true);       
        
       
       
        
    }
    
    public void actionPerformed(ActionEvent e){
        String sql = ein.getText();
        ResultSet r;
        try{
            //DBMS-Treiber registrieren, Verbindung mit Datenbank herstellen
           
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            c = DriverManager.getConnection("jdbc:odbc:"+database.getText(),databaseUserName.getText(), databasePassword.getText());
            s= c.createStatement();
            
            //HIER BEGINNT MEINE ABFRAGE

            r = s.executeQuery(sql);
            ResultSetMetaData rm = r.getMetaData();
            int x = rm.getColumnCount();
            ausgabe.setText("");
            
             for (int i=1; i <= x; i++){
             ausgabe.append(rm.getColumnName(i));
             if(i !=x) ausgabe.append(", ");
             else ausgabe.append("\n");
            }
            
            //SCHLEIFE FUER DIE AUSGABE

            while(r.next()){
                for (int i=1; i <= x; i++){
                        
                    ausgabe.append(r.getString(i));
                    if(i !=x) ausgabe.append(", ");
                    else ausgabe.append("\n");    
                    
                    
                    
                    
                    
                }
            }
            
        }
        catch (Exception ex){
            ausgabe.setText("SQL: " + sql + "\nFehler:\n" + ex.getMessage());
        }
        
    }
    
    public static void main(String[] args){
        new SqlDirektSelect(); //GUI START
        
    }

}
[/code][/b]
 
Code:
for (int i=1; i <= x; i++)

würd ich ersetzen mit

Code:
for (int i=0; i < x; i++)

weiß aber net, ob damit alles schon geklärt ist ???:L
 
Hallo,

soll die NULL ausgegeben werden,
wenn ja: append(""+rs.getString(i));
wenn nein:

String hilfsvariable = "";
while (r.next()) {
...
if((hilfsvariable=r.getString(i))==null)
hilfsvariable = "";
ausgabe.append(hilfsvariable);
...
}

Anmerkung: Ich weiss ja nicht wie gross die ResultSets werden können, aber die Verwendung von "append()" scheint mir hier nicht so geeignet, da ja jedesmal nach dem Aufruf der Methode die GUI neu gezeichnet wird.
 
Vielen Dank für die Anregungen. Auf das append(""+rs.getString(i)); hätte ich auch mal kommen sollen... Naja so klappt es jedenfalls. Was wäre denn die Alternative zum append??? Meine ResultSets können schonmal über 30000 Datensätze haben.
 
huja hat gesagt.:
Vielen Dank für die Anregungen. Auf das append(""+rs.getString(i)); hätte ich auch mal kommen sollen... Naja so klappt es jedenfalls. Was wäre denn die Alternative zum append??? Meine ResultSets können schonmal über 30000 Datensätze haben.
ich hab keinen schimmer, ob bei append die gui neu gezeichnet wird, aber falls das so ist:
die rückgabewerte von rs.getString(i); in einen string oder char[] zwischenspeichern, und den dann alle paar datensätze(vllt alle 100 oder so) die gesammelten rückgabewerte mit append anhängen.
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben