# Problem mit ResultSet bei SQL Server 2005



## Mundschuk (6. Apr 2009)

Hallo zusammen,

ich habe ein Problem, bei dem ich schon seit einigen Stunden davor sitze... .
Ich will mit einer Anwendung auf eine Tabelle innerhalb einer
SQL-Server-2005-Instanz zugreifen. Allerdings bekomme ich immer beim
Ausführen der Abfrage einen Block Fehler.

Eventuell habe ich etwas vergessen...?!

Auszug aus Klasse Main
[HIGHLIGHT="Java"]btCase.addActionListener(new ActionListener() {

  public void actionPerformed(ActionEvent e) {
    ResultSet rs = null;
    DBConnection object = new DBConnection();
    System.out.println(object);
    String pSQL =
          "USE ServerManagement GO SELECT SNM FROM dbo.ServerIdentification;";

    object.DBOpen();
    System.out.println("Jetzt kommt's...");
    rs = object.DBExecute(pSQL);
    System.out.println("?");

    try {
      String gateway = rs.getString("Gateway");
      System.out.println(gateway);

    } catch (SQLException ex) {
      System.out.println("FEHLER3");
    }

    object.DBClose(rs);
  }
});[/HIGHLIGHT]
Die ganzen sinnlosen System.out habe ich gemacht,
um zu sehen, wo genau er hängen bleibt.
Er gibt mir noch das "?" aus, danach kommen die Fehlermeldungen.


Auszug aus Klasse DBZugriff:
[HIGHLIGHT="Java"]public class DBConnection {

  Connection con;
  Statement stmt;

  String user = "koppelmann";
  String pwd = "xxxxxxxxxx";

  public void DBOpen() {
    try {
      Class.forName("net.sourceforge.jtds.jdbc.Driver");
      con =
            DriverManager.getConnection(
                  "jdbc:jtds:sqlserver://KOPPELMANN:1433/ServerManagement",
                  user, pwd);
      System.out.println("Datenbank wurde erfolgreich geoeffnet...");
    } catch (Exception ex) {
      System.err.println("FEHLER1");
    }
  }

  public ResultSet DBExecute(String pSQL) {
    String SQL = pSQL;
    System.out.println(SQL);

    ResultSet rs = null;

    try {
      stmt = con.createStatement();
      rs = stmt.executeQuery(SQL);

    } catch (SQLException ex) {
      System.out.println("Fehler beim Ausführen der Abfrage...");
    }
    return rs;
  }

  public void DBClose(ResultSet rs) {
    try {
      con.close();
      stmt.close();
      rs.close();
      System.out.println("Die Datenbank wurde erfolgreich geschlossen...");
    } catch (SQLException ex) {
      System.err.println("Fehler beim Schließen der Datenbank...");
    }
  }
}[/HIGHLIGHT]

Ausgabe:

```
DBConnection@14a9972
Datenbank wurde erfolgreich geoeffnet...
Jetzt kommt's...
USE ServerManagement GO SELECT SNM FROM dbo.ServerIdentification;
Fehler beim Ausführen der Abfrage...
```
?

```
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
	at GUI$2.actionPerformed(GUI.java:58)
	at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
	at javax.swing.AbstractButton$Handler.actionPerformed (Unknown Source)
	at javax.swing.DefaultButtonModel.fireActionPerformed (Unknown Source)
	at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
	at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
	at java.awt.Component.processMouseEvent(Unknown Source)
	at javax.swing.JComponent.processMouseEvent(Unknown Source)
	at java.awt.Component.processEvent(Unknown Source)
	at java.awt.Container.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
	at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
	at java.awt.Container.dispatchEventImpl(Unknown Source)
	at java.awt.Window.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
```
Falls im Code kein Fehler sein sollte, viele mir nur noch ein Rechteproblem
innerhalb des SQL-Servers ein, obwohl ich eigentlich alle benötigten Rechte
für einen Zugriff auf den Endpunkt und die Datenbankobjekte habe... .

Ich hoffe jmd kann mir helfen 

Vielen Dank schonmal

Grüße
Mundschuk


----------



## SlaterB (6. Apr 2009)

} catch(SQLException ex) {
System.out.println("Fehler beim Ausführen der Abfrage...");
}

gib die Fehlermeldung aus,
ex.printStackTrace();


wieso gibst du stattdessen den StackTrace der NullPointerException aus?
ist doch klar, dass die kommt, wenn rs null ist, da "Fehler beim Ausführen der Abfrage..." ersichtlich macht, 
dass kein ordentliches ResultSet erzeugt wurde

--------

nebenbei:
bevor man auf ein Element des ResultSets zugreifen kann, muss man next() aufrufen


----------



## Mundschuk (6. Apr 2009)

Mmh, ich bin nicht wirklich gut, will besser werden.
Ich habe um das .printStackTrace() immer einen Bogen gemacht,
zu kryptisch .

Ich habe den catch-Block mit der Stack-Ausgabe erweitert:

```
DBConnection@1608e05
Datenbank wurde erfolgreich geoeffnet...
Jetzt kommt's...
USE ServerManagement GO SELECT SNM FROM dbo.ServerIdentification;
java.sql.SQLException: Falsche Syntax in der Nähe von 'GO'.
    at net.sourceforge.jtds.jdbc.SQLDiagnostic.addDiagnostic(SQLDiagnostic.java:368)
    at net.sourceforge.jtds.jdbc.TdsCore.tdsErrorToken(TdsCore.java:2816)
    at net.sourceforge.jtds.jdbc.TdsCore.nextToken(TdsCore.java:2254)
    at net.sourceforge.jtds.jdbc.TdsCore.getMoreResults(TdsCore.java:631)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeSQLQuery(JtdsStatement.java:477)
    at net.sourceforge.jtds.jdbc.JtdsStatement.executeQuery(JtdsStatement.java:1301)
    at DBConnection.DBExecute(DBConnection.java:30)
    at GUI$2.actionPerformed(GUI.java:54)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
```


```
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
    at GUI$2.actionPerformed(GUI.java:58)
    at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
    at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
    at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
    at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Source)
    at java.awt.Component.processMouseEvent(Unknown Source)
    at javax.swing.JComponent.processMouseEvent(Unknown Source)
    at java.awt.Component.processEvent(Unknown Source)
    at java.awt.Container.processEvent(Unknown Source)
    at java.awt.Component.dispatchEventImpl(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
    at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
    at java.awt.Container.dispatchEventImpl(Unknown Source)
    at java.awt.Window.dispatchEventImpl(Unknown Source)
    at java.awt.Component.dispatchEvent(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)
?
```


----------



## Ebenius (6. Apr 2009)

Bitte den Quelltext sinnvoll formatieren. Dazu *plain text* in dieser Form in den Editor kopieren: [noparse][highlight=Java]Quelltext[/highlight][/noparse] Dazu gibt's auch einen Button in den Editoren (Java-Tasse). Wenn *plain text* aus der IDE nicht funktioniert, dann ggf. nochmal in den Texteditor Deiner Wahl (notepad, kwrite, ...) einfügen und von dort kopieren. Compiler-/Laufzeit-Ausgaben ebenfalls formatieren; am besten in CODE-Tags. Hab ich jetzt für Dich mal eben gemacht...

Ebenius


----------



## Mundschuk (6. Apr 2009)

Ebenius hat gesagt.:


> Bitte den Quelltext sinnvoll formatieren. Dazu *plain text* in dieser Form in den Editor kopieren: [noparse][highlight=Java]Quelltext[/highlight][/noparse] Dazu gibt's auch einen Button in den Editoren (Java-Tasse). Wenn *plain text* aus der IDE nicht funktioniert, dann ggf. nochmal in den Texteditor Deiner Wahl (notepad, kwrite, ...) einfügen und von dort kopieren. Compiler-/Laufzeit-Ausgaben ebenfalls formatieren; am besten in CODE-Tags. Hab ich jetzt für Dich mal eben gemacht...
> 
> Ebenius


 
Ups, tut mir Leid ich denke beim nächsten mal daran.

Danke für das Nachbessern :applaus:


----------



## SlaterB (6. Apr 2009)

das GO wird also angemeckert,
ich kann das inhaltlich nicht beurteilen, wenn du meinst, dass SQL irgendwer Server sowas verstehen sollte, tja dann..,

teste mit anderen direkten SQL-Tools das Kommando,
versuche eine andere Syntax, z.B. GO weglassen

wenn ServerManagement schon direkt in der Connection angegeben ist:
>DriverManager.getConnection( 
>               "jdbc:jtds:sqlserver://KOPPELMANN:1433/ServerManagement",

dann kannst du wahrscheinlich auch auf 'USE ServerManagement' verzichten

das Semikolon am Ende ist auch fraglich, in JDBC gibts eh hauptsächlich Einzelkommandos


----------



## Mundschuk (6. Apr 2009)

SlaterB hat gesagt.:


> das GO wird also angemeckert,
> ich kann das inhaltlich nicht beurteilen, wenn du meinst, dass SQL irgendwer Server sowas verstehen sollte, tja dann..,
> 
> teste mit anderen direkten SQL-Tools das Kommando,
> ...


 
Vielen Dank, es lag am 'USE' und 'GO'.
In einer normalen Abfrage innerhalb des Servers muss ich es benutzen,
aber anscheinend wirklich nich wenn ich schon bei der Verbindung auf die
richtige Datenbank verweise 

Vielen Dank nochmal! :toll:

Grüße
Mundschuk


----------

