Avatar billede lmdthel Nybegynder
23. juli 2005 - 22:48 Der er 13 kommentarer og
2 løsninger

Hvordan får jeg rset = stmt.executeQuery ind i et arrary

Hej Rødder

via JDBC henter jeg data,går fint med

rset = stmt.executeQuery

og et kan jeg så printe med:

while (rset.next()) { 
System.out.println(rset.getString(1));

}

men jeg ville nu godt have det ind i et Array istedet, så jeg kan resturnere det fra min metode..

Er der en smart måde at gøre det på ?
Avatar billede arne_v Ekspert
23. juli 2005 - 22:51 #1
hvis du ved hvor mange rækker der er:

String[] a = new String[n];
int i = 0;
while (rset.next()) {
  a[i] = rset.getString(1));
  i++;
}
Avatar billede arne_v Ekspert
23. juli 2005 - 22:51 #2
i praksis vil man som oftest vælge en collection:

List a = new ArrayList();
while (rset.next()) {
  a.add(rset.getString(1));
}
Avatar billede arne_v Ekspert
23. juli 2005 - 22:52 #3
du kan godt konvertere en ArrayList til et array men normalt er det ikke nødvendigt
Avatar billede mikkelbm Nybegynder
23. juli 2005 - 22:56 #4
Og lige i forlængelse af Arne.

Hvis du vil ha' et array tilbage er det nemt at lave en ArrayList om til et array med en bestemt type objekter:

DitObject[] obj = (DitObject[])list.toArray (new DitObject[]);
Avatar billede mikkelbm Nybegynder
23. juli 2005 - 22:57 #5
DitObject[] obj = (DitObject[])list.toArray (new DitObject[0]);

Skulle det være :)
Avatar billede lmdthel Nybegynder
23. juli 2005 - 23:36 #6
Tak for hjælpen..hvis i smider et svar :-)
Avatar billede arne_v Ekspert
23. juli 2005 - 23:37 #7
.
Avatar billede mikkelbm Nybegynder
23. juli 2005 - 23:38 #8
..
Avatar billede lmdthel Nybegynder
24. juli 2005 - 00:38 #9
nå nu er klokken bare lidt for meget, og det driller, kan en af jer se hvorfor jeg ikke kan få lov til at return noget som helst fra min metode ? jeg har på fornemmelsen at det er min try-catch, men det går jo slet ikke uden..

Den brokker sig over at lineTraining ikke retunerer en List, men det vil jeg jo mene den gør, eller hva ?

    public List lineTraining(){
       
                   
    try {
       
           
      Statement stmt;
      ResultSet rset = null;
           
      //Register the JDBC driver for MySQL.
      Class.forName("com.mysql.jdbc.Driver");
           
      //Define URL of database server on the host with the default port number 3306.
      String url = "jdbc:mysql://"+ ip + DATABASE;

      //Get a connection to the database
      Connection con = DriverManager.getConnection(url,USR,PSW);

      //Get a Statement object
      stmt = con.createStatement();
      rset = stmt.executeQuery("SELECT hostIp, portNr, MAX(maxAttUp), COUNT(*) FROM lineTraining GROUP BY hostIp,PortNr");
     
      List a = new ArrayList();
      while (rset.next()) {
        a.add(rset.getString(1));
      }
                       
     
      rset.close();
      stmt.close();     
      con.close();
     
      return a;
     
     
    }catch( Exception e ) {
      e.printStackTrace();
     
    }//end catch
  }//end lineTraining
Avatar billede mikkelbm Nybegynder
24. juli 2005 - 00:41 #10
catch( Exception e )
{
      e.printStackTrace();
      return null;
      // eller : return new ArrayList();
}//end catch
Avatar billede mikkelbm Nybegynder
24. juli 2005 - 00:42 #11
Hvis der opstår en Exception, returnerer du ikke noget... ;)
Avatar billede lmdthel Nybegynder
24. juli 2005 - 01:22 #12
Ja virker gør det, om jeg forstår hvorfor, nej..
Avatar billede mikkelbm Nybegynder
24. juli 2005 - 01:28 #13
Når du sætter en metode til at returnere noget, SKAL der også returneres noget!

public String getName()
{
  try
  {
      string text = // Hent noget fra database....
      return text;
  }
  catch (Exception e)
  {
      return "Error";
  }
}

Hvis kaldene til databasen fejler, vil der blive smidt en Exception som fanges i catch - på den måde bliver 'return text' sprunget over. Derfor skal der også i din catch være en return, for ellers returnerer metoden ikke noget.
Avatar billede mikkelbm Nybegynder
24. juli 2005 - 01:30 #14
En anden mulighed i dit tilfælde er at flytte oprettelsen af din arraylist udenfor try/catch:

public List lineTraining()
{
    List a = new ArrayList();             
    try
    {   
      Statement stmt;
      ResultSet rset = null;
           
      // Resten af din kode... uden en return!     
    }
    catch( Exception e )
    {
      e.printStackTrace();
    }

    return a;
}
Avatar billede mikkelbm Nybegynder
24. juli 2005 - 01:30 #15
Håber det opklarede det lidt...
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