Avatar billede mik28 Seniormester
20. maj 2004 - 16:25 Der er 28 kommentarer og
1 løsning

Problem med resultset

try {
       
           
            String user  = (String)session.getAttribute("navn");
           
            Vector vi = new Vector();
            vi.addElement(user);
       
            ResultSet rs    = d.select("SELECT ID,username,pass,navn,adresse,postnr,email,telefon,mobil FROM users WHERE username=?", vi);
            ResultSet rs1    = d.select("SELECT p.byen FROM users u, postnr p WHERE p.postnr=u.postnr AND username=?", vi);
           
            if(rs.next()) {


            ResultSetMetaData rsmd = rs.getMetaData();
            int antalKolonner = rsmd.getColumnCount();
            System.out.println(antalKolonner+" kolonner");

            // udskriv kolonnenavnene
            for (int i=1; i<=antalKolonner; i++) {
            System.out.println(rsmd.getColumnName(i) + "'s indhold: "+rs.getString(i));
           
            String pv = request.getParameter(rsmd.getColumnName(i));
            if (pv != null) {
                rs.updateString(i,pv);
                rs.updateRow();
            }
        }
                   
           
           
            String id      = rs.getString("ID");
            String pass    = rs.getString("pass");
            String navn    = rs.getString("navn");
            String adresse = rs.getString("adresse");
            String postnr  = rs.getString("postnr");
            String by      = rs1.getString("byen");
            String telefon = rs.getString("telefon");
            String mobil  = rs.getString("mobil");
            String email  = rs.getString("email");
Avatar billede mik28 Seniormester
20. maj 2004 - 16:26 #1
hvorfor for jeg ikke byen?
Avatar billede mik28 Seniormester
20. maj 2004 - 16:29 #2
SQL fejl: java.sql.SQLException: Before start of result set 0 S1000
Avatar billede arne_v Ekspert
20. maj 2004 - 16:36 #3
String by      = rs1.getString("byen");

og du har ikke kaldt rs1.next() før
Avatar billede fsconsult.dk Nybegynder
20. maj 2004 - 16:50 #4
Umiddelbart ser det ud som om du kunne nøjes med et select:

ResultSet rs    = d.select("SELECT u.ID,u.username,u.pass,u.navn,u.adresse,u.postnr,u.email,u.telefon,u.mobil,p.byen FROM users u, postnr p WHERE p.postnr=u.postnr AND u.username=?", vi);

og så bruge rs.getString("byen"); istedetfor rs1.getString("byen");
Avatar billede mik28 Seniormester
20. maj 2004 - 16:53 #5
ResultSet rs1    = d.select("SELECT p.byen FROM users u, postnr p WHERE p.postnr=u.postnr AND username=?", vi);
Avatar billede mik28 Seniormester
20. maj 2004 - 16:54 #6
grunden til at jeg ikke kan bruge et select er at jeg ikke kræver at postnr er udfyldt
Avatar billede arne_v Ekspert
20. maj 2004 - 16:55 #7
LEFT JOIN løser det problem
Avatar billede arne_v Ekspert
20. maj 2004 - 16:56 #8
Men forsvandt dit umiddelbare problem ikke ved at kalde rs1.next() ?
Avatar billede mik28 Seniormester
20. maj 2004 - 16:56 #9
jeg fatter hat
Avatar billede mik28 Seniormester
20. maj 2004 - 16:58 #10
jeg kalder jo ikke rs1.next()
Avatar billede arne_v Ekspert
20. maj 2004 - 17:00 #11
Nej men det bør du !
Avatar billede mik28 Seniormester
20. maj 2004 - 17:00 #12
String by      = rs1.getString("byen");
Avatar billede arne_v Ekspert
20. maj 2004 - 17:00 #13
Left join er bare:

ResultSet rs    = d.select("SELECT u.ID,u.username,u.pass,u.navn,u.adresse,u.postnr,u.email,u.telefon,u.mobil,p.byen FROM users u KEFT JOIN postnr p ON p.postnr=u.postnr WHERE u.username=?", vi);
Avatar billede arne_v Ekspert
20. maj 2004 - 17:01 #14
Du kan ikke kalde rs1.getNoget førend du har kaldt rs1.next()
Avatar billede mik28 Seniormester
20. maj 2004 - 17:01 #15
så forstår jeg lidt mere
Avatar billede mik28 Seniormester
20. maj 2004 - 17:02 #16
men det viste jeg ikke
Avatar billede mik28 Seniormester
20. maj 2004 - 22:46 #17
Jeg kan bare ikke se det. Hvordan får jeg rs1 opdateret?

ResultSet rs    = d.select("SELECT ID,username,pass,navn,adresse,postnr,email,telefon,mobil FROM users WHERE username=?", vi);
            ResultSet rs1    = d.select("SELECT p.byen FROM users u, postnr p WHERE p.postnr=u.postnr AND username=?", vi);
           
            if(rs.next()) {

            ResultSetMetaData rsmd = rs.getMetaData();
            int antalKolonner = rsmd.getColumnCount();
            System.out.println(antalKolonner+" kolonner");

            // udskriv kolonnenavnene
                for (int i=1; i<=antalKolonner; i++) {
                System.out.println(rsmd.getColumnName(i) + "'s indhold: "+rs.getString(i));
               
                String pv = request.getParameter(rsmd.getColumnName(i));
                if (pv != null) {
                    rs.updateString(i,pv);
                    rs.updateRow();
                    }
               
            }
                   
            if(rs1.next()) {
           
              String by      = rs1.getString("byen");
             
            }
Avatar billede arne_v Ekspert
20. maj 2004 - 22:49 #18
String by;
if(rs1.next()) {
  by = rs1.getString("byen");
} else {
  by = "";
}

var nok bedre.
Avatar billede mik28 Seniormester
20. maj 2004 - 22:58 #19
kan jeg ikke have to rs.next i en try catch
Avatar billede mik28 Seniormester
20. maj 2004 - 22:59 #20
try {
       
           
            String user  = (String)session.getAttribute("navn");
           
            Vector vi = new Vector();
            vi.addElement(user);
       
            ResultSet rs    = d.select("SELECT ID,username,pass,navn,adresse,postnr,email,telefon,mobil FROM users WHERE username=?", vi);
            ResultSet rs1    = d.select("SELECT p.byen FROM users u, postnr p WHERE p.postnr=u.postnr AND username=?", vi);
           
            if(rs.next()) {

            ResultSetMetaData rsmd = rs.getMetaData();
            int antalKolonner = rsmd.getColumnCount();
        //    System.out.println(antalKolonner+" kolonner");

            // udskriv kolonnenavnene
                for (int i=1; i<=antalKolonner; i++) {
        //        System.out.println(rsmd.getColumnName(i) + "'s indhold: "+rs.getString(i));
               
                String pv = request.getParameter(rsmd.getColumnName(i));
                if (pv != null) {
                    rs.updateString(i,pv);
                    rs.updateRow();
                    }
               
            }
                   
            if(rs1.next()) {
           
            ResultSetMetaData rsmd1 = rs1.getMetaData();
            int antalKolonner1 = rsmd1.getColumnCount();
               
                for (int i=1; i<=antalKolonner1; i++) {
       
                String pv1 = request.getParameter(rsmd1.getColumnName(i));
                if (pv1 != null) {
                    rs1.updateString(i,pv1);
                    rs1.updateRow();
                    }
                   
            }
           
            String id      = rs.getString("ID");
            String pass    = rs.getString("pass");
            String navn    = rs.getString("navn");
            String adresse = rs.getString("adresse");
            String postnr  = rs.getString("postnr");
            String by      = rs1.getString("byen");
            String telefon = rs.getString("telefon");
            String mobil  = rs.getString("mobil");
            String email  = rs.getString("email");
           
           
            if(navn==null){
            navn="";
            }
            if(adresse==null){
            adresse="";
            }
           
            buffer.append("<div>");
            buffer.append("Personlige indstillinger");
            buffer.append("</div>");
           
            buffer.append("<form action=\"./settings.jsp\" method=\"post\" onsubmit=\"return popupupd();\">");
            buffer.append("<table>");
            buffer.append("<tr><td>");
            buffer.append("Brugernavn");
            buffer.append("</td><td>");
            buffer.append("<input type=\"text\" name=\"user\" value=\""+user+"\">");
            buffer.append("</td></tr>");
           
            buffer.append("<tr><td>");
            buffer.append("Password");
            buffer.append("</td><td>");
            buffer.append("<input type=\"password\" name=\"pass\" value=\""+pass+"\">");
            buffer.append("</td></tr>");
           
            buffer.append("<tr style=\"height:25px;\"><td>");
            buffer.append("</td><td>");
            buffer.append("</td></tr>");
           
            buffer.append("<tr><td>");
            buffer.append("Navn");
            buffer.append("</td><td>");
            buffer.append("<input type=\"text\" name=\"navn\" value=\""+navn+"\">");
            buffer.append("</td></tr>");
           
            buffer.append("<tr><td>");
            buffer.append("Adresse");
            buffer.append("</td><td>");
            buffer.append("<input type=\"text\" name=\"adresse\" value=\""+adresse+"\">");
            buffer.append("</td></tr>");
           
            buffer.append("<tr><td>");
            buffer.append("Postnr.");
            buffer.append("</td><td>");
            buffer.append("<input type=\"text\" name=\"postnr\" value=\""+postnr+"\">");
            buffer.append("</td></tr>");
           
            buffer.append("<tr><td>");
            buffer.append("By");
            buffer.append("</td><td>");
            buffer.append("<input type=\"text\" name=\"by\" value=\""+by+"\">");
            buffer.append("</td></tr>");
           
            buffer.append("<tr><td>");
            buffer.append("Telefon");
            buffer.append("</td><td>");
            buffer.append("<input type=\"text\" name=\"telefon\" value=\""+telefon+"\">");
            buffer.append("</td></tr>");
           
            buffer.append("<tr><td>");
            buffer.append("Mobil");
            buffer.append("</td><td>");
            buffer.append("<input type=\"text\" name=\"mobil\" value=\""+mobil+"\">");
            buffer.append("</td></tr>");
           
            buffer.append("<tr><td>");
            buffer.append("Email");
            buffer.append("</td><td>");
            buffer.append("<input type=\"text\" name=\"email\" value=\""+email+"\">");
            buffer.append("</td></tr>");
            buffer.append("</table>");
           
            buffer.append("<input type=\"hidden\" name=\"id\" value=\""+id+"\">");
            buffer.append("<input type=\"hidden\" name=\"update\" value=\"doupdate\">");           
            buffer.append("<input type=\"submit\" name=\"updateknap\" value=\"Opdater\">");
           
            buffer.append("</form>");
           
            }           
               
        } catch (SQLException s) {
            buffer.append("<h3>SQL fejl: " + s.toString() + " "
            + s.getErrorCode() + " " + s.getSQLState() + "</h3>");
        }
Avatar billede arne_v Ekspert
20. maj 2004 - 23:01 #21
Selvfølgelig kan du have rs.next og rs1.next i samme try catch
Avatar billede arne_v Ekspert
20. maj 2004 - 23:02 #22
PS: Burde noget af al den HTML du laver med buffer.append ikke være
    udenfor <% %> så du slap for en masse kode ?
Avatar billede mik28 Seniormester
20. maj 2004 - 23:03 #23
Hvad er der så galt med

ResultSetMetaData rsmd1 = rs1.getMetaData();
            int antalKolonner1 = rsmd1.getColumnCount();
               
                for (int i=1; i<=antalKolonner1; i++) {
       
                String pv1 = request.getParameter(rsmd1.getColumnName(i));
                if (pv1 != null) {
                    rs1.updateString(i,pv1);
                    rs1.updateRow();
                    }
Avatar billede arne_v Ekspert
20. maj 2004 - 23:07 #24
Umiddelbart ser det ud som der mangler en }
Avatar billede mik28 Seniormester
20. maj 2004 - 23:19 #25
hmmmmm. Jeg fatter altså ikke at det ikke virker :-(. Du havde ret i at der manglede en }, men hvorfor bliver rs1 ikke opdateret?

http://web-oasen.dk:8080/golf/

user: test
pass: 12345abc

tryk på indstillinger, ændre postnr og tryk på opdater. Hvorfor skal jeg trykke på opdater igen før det virker?
Avatar billede mik28 Seniormester
20. maj 2004 - 23:47 #26
hmmm, nu syntes det at virke
Avatar billede arne_v Ekspert
21. maj 2004 - 07:47 #27
Fint
Avatar billede rixx Nybegynder
22. maj 2004 - 22:31 #28
Jeg ved ikke om du fik løs dit problem med at kalde rs.next() og rs1.next(). Hvordan du har pakket din Connection og Statement ind, men jeg mener at kunne erindre at man kun kan have et åbent ResultSet pr Statement. Jeg ved ikke om det kan have noget med dit problem at gøre, at rs og rs1 er oprettet på samme Statement instans.
Jeg kan ikke helt set det da du ikke har inkluderet dette i dit eksempel men kalder en metode der hedder "select()" på instansen "d".

Igen jeg ved ikke om du har fået løst problemet, men jeg kunne ikke lige lade være med at skrive det.
Avatar billede mik28 Seniormester
22. maj 2004 - 23:56 #29
Det er fair nok. Mit problem er løst :-)
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