Avatar billede agent29 Nybegynder
07. maj 2002 - 02:26 Der er 6 kommentarer og
1 løsning

[Java/MySQL] - At returnere et ResultSet...

Hep, Jeg har følgende i en DB klasse, som jeg så kalder andre steder, men jeg kan ikke få den til at returnere andet en null. Det vil sige, at hvis jeg skriver ud direkte i DB klassen, er der et resultat, men så snart jeg kalder den et andet sted, returnere den null??

Her er koden:

[Fra DB klasse]
    public ResultSet execSQL(){
       
       
        try {
            Class.forName(this.driver).newInstance();
        }       
        catch (Exception E) {
            System.err.println("Unable to load driver.");
            E.printStackTrace();
        }

        try {       
            Connection C = DriverManager.getConnection(
            "jdbc:mysql://"+this.host+":"+this.port+"/"+this.database+"?user="+this.user+"&password="+this.password+""
            );       
       
            try {
                Statement S = C.createStatement();
                ResultSet R = S.executeQuery(this.query);
               
                System.out.println(R.getString(2));
                R.close();
                S.close();
                C.close();               
            }
            catch (SQLException E) {           
                System.out.println("SQLException: " + E.getMessage());
                System.out.println("SQLState:    " + E.getSQLState());
                System.out.println("VendorError:  " + E.getErrorCode());       
            }

        }
        catch (SQLException E) {
           
            System.out.println("SQLException: " + E.getMessage());
            System.out.println("SQLState:    " + E.getSQLState());
            System.out.println("VendorError:  " + E.getErrorCode());
           
        }
   
        return R;
       
    }


[Kald fra andet sted]

        MySQL DB = new MySQL();
        DB.setQuery("SELECT id, description FROM plejeproblem");
        res = DB.execSQL();

        try {
            if (res != null) {
                while (res.next()) {
                    System.out.println(res.getString(1));
                }
            }
            else {
                System.out.println("Dataseek returned no result");   
            }
        }
        catch (SQLException E) {
            System.out.println("SQLException: " + E.getMessage());
        }

Nogen der kan lure den??
Avatar billede erikjacobsen Ekspert
07. maj 2002 - 06:31 #1
Du skal ikke sige R.close()
Avatar billede =maddog= Nybegynder
07. maj 2002 - 07:10 #2
men burde han ikke få et output af
System.out.println(R.getString(2));
det står trods alt før R.close();
ellers jo. det er nok det.
Avatar billede erikjacobsen Ekspert
07. maj 2002 - 07:21 #3
det siger han jo også han får
Avatar billede =maddog= Nybegynder
07. maj 2002 - 07:24 #4
det gør han også. god morgen hr. bæver.
Avatar billede disky Nybegynder
07. maj 2002 - 11:24 #5
hvis dit query kun indeholder udtagelse af 1 kolonne er getString(2) jo null,

hvorfor lukker du dit resultSet, når du ønsker at returnere det ?

Hvad er din query egentligt ? Hvis den er tom for du også null.
Avatar billede erikjacobsen Ekspert
07. maj 2002 - 12:25 #6
men der er nu én ting mere galt.

Du skal ikke erklære din variabel R inde i din try, for
så bliver det en lokal variabel. Og så skal du have en "global"
R for at få det til at blive oversat. Den vil være null.

Derfor: inde i try

  R = S.executeQuery(this.query);

og så erklæring:

  public ResultSet execSQL(){
  ResultSet R;
Avatar billede agent29 Nybegynder
07. maj 2002 - 12:55 #7
Sådan Erik, det var præcist med "global" den var gal.

Tak.
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester