Avatar billede r9 Nybegynder
17. april 2002 - 08:30 Der er 7 kommentarer og
1 løsning

Query metode?

Hejsa

Jeg skal bruge en Query metode, som jeg kan bruge ved  ALLE mine databse søgninger.

Det vil sige at det er samme metode jeg kalder, ligegyldig hvordan min SQL sætning er.

Resultatet skal så ligge i et ReslutSet/vector, hvor jeg kan trække de ønskede data ud fra.

Er der nogen der har lavet sådan en metode i forvejen?
Avatar billede kube Nybegynder
17. april 2002 - 08:48 #1
public void query(String queryString) throws SQLException
    {
        Statement stmt= con.createStatement();
        rs= stmt.executeQuery(queryString);

        show(rs);
    }



    public void show(ResultSet r) throws SQLException
    {

        while(r.next())
        {
            System.out.println(rs.getString(1)+"\n"+rs.getString(2)+"\n"+rs.getString(3)+"\n"+rs.getString(4)+"\n"+rs.getString(5));
            System.out.println();
        }
    }
Avatar billede kube Nybegynder
17. april 2002 - 08:50 #2
så sender du bare din forespørgsel til metoden query - show metoden skal nok laves lidt om da den kun skriver i promten....
Avatar billede disky Nybegynder
17. april 2002 - 08:50 #3
Hvis vi siger du har hentet kolonnerne 'navn' og 'telefonnummer' fra en tabel, så gør du følgende:

String navn=res.getString("navn");
int telefonnummer=res.getInt("telefonnummer");

Vupti så er der en String der hedder navn som indeholder navnet fra din database, og en int der indeholder telefonnummeret.

For at rende hele resultsettet igennem gør du:


String navn;
int telefonnummer;
while(res.hasNext())
{
navn=res.getString("navn");
telefonnummer=res.getInt("telefonnummer");
//Kald her en metode der bruge det du har hentet fra databasen
}

Det jeg selv gør er at jeg har en klasse kun med get/set metoder på de ting jeg henter fra basen, disse objecter opretter jeg så inde i while() løkken og gemmer på en java.util.List liste.
Fungerer fint.
Avatar billede r9 Nybegynder
17. april 2002 - 09:08 #4
Jeg havde nu mere tænkt på at gemme ALT i en vector, og så gemmenløbe den der hvor jeg trækker data ud igen.

På den måde er jeg fri for at oprette en ny "getString(), hvis databasen pludselig ændres.

Eller hvad?
Avatar billede disky Nybegynder
17. april 2002 - 09:23 #5
Så skal du til at kigge på Database meta data, hvor du kan se hvordan den tabel du spørger fra er defineret.

Men hvis du designer dit system ordentligt kan du bare rette i databasen og så reflekteres det straks i dine metoder :)

Men du skal løbe dit resultSet igennem ligegyldigt hvad du gør, derefter kan du så lægge data i objecter som du smider i en vector/arraylist/linkedlist osv.

p.s. Vector har dårligere performance end ArrayList pga. syncronization.
Avatar billede r9 Nybegynder
17. april 2002 - 09:58 #6
OK.
Jeg vil smide alle mine rækker fra DB over i en vector.

Hvorfor virker dette ikke efter hensigten?


    public Vector doQuery(String SQLUdtryk)
      {
        ResultSet rs = null;
                Vector data = new Vector();


      try
                  {
                    Connection con = DriverManager.getConnection(url);
                    Statement stmt = con.createStatement();
                    rs = stmt.executeQuery(SQLUdtryk);
                    ResultSetMetaData rsmd = rs.getMetaData();

                    int numberOfColumns = rsmd.getColumnCount();



      while(rs.next())

              {

      if(numberOfColumns > 1)
                    {
                    for(int i=1; i<numberOfColumns;i++)
                        {
                          data.add(rs.getString(i));
                        }
                    }
      else
                            {
                              data.add(rs.getString(1));
                            }

              }

                      rs.close();
                      stmt.close();
                      con.close();
   
  }



      catch(Exception e)
    {
        e.printStackTrace();
    }

       
       
        return data;
             
               
    }


Jeg får kun alt data fra første kolonne, og ikke fra de efterfølgende kolonner?
Avatar billede disky Nybegynder
17. april 2002 - 10:30 #7
prøv at ret for løkken til:
for(int i=1; i<=numberOfColumns;i++)

ellers ser det ok ud,
Avatar billede r9 Nybegynder
17. april 2002 - 15:15 #8
Takker, det virker.
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