Avatar billede medions Nybegynder
02. april 2003 - 20:21 Der er 13 kommentarer og
1 løsning

SQL - Insert

<jsp:useBean id="db" scope="request" class="itarkiv.Database" />
<%@ page import="java.sql.*" %>
        ResultSet res;
        String strSql;
       
        if(!db.open())
        {
            return;
        }
               
        strSql = "INSERT INTO itarkiv_users(`username`,`password`,`fornavn`,`efternavn`,`adresse`,`postnr`,`email`,`web`,`icq`,`msn`,`profiltekst`,`userlevel`,`tid`) VALUES('" + brugernavn + "', '" + password + "', '" + fornavn + "', '" + efternavn + "', '" + adresse + "', '" + postnr + "', '" + email + "', '" + http + "', '" + icq + "', '" + msn + "', '" + profiltekst + "','1' ,now())";
        db.doQuery(strSql);
        res.next();

        db.close();

Hvorfor giver overstående flg. fejl?:
Note: sun.tools.javac.Main has been deprecated.
C:\Apache\htdocs\itarkiv.dk\new\opretbruger.jsp:180: Variable res may not
have been initialized.
        res.next();
        ^
1 error, 1 warning

//>Rune
Avatar billede arne_v Ekspert
02. april 2003 - 20:25 #1
res har ikke fået en værdi.
Avatar billede arne_v Ekspert
02. april 2003 - 20:26 #2
Mit gæt er at du vil:

res = db.doQuery(.....

Men jeg kender ikke klassen, så det er et gæt.
Avatar billede medions Nybegynder
02. april 2003 - 20:26 #3
arne_v> Det har jeg prøvet, men så bliver der ikke lageret noget ind i databasen!

//>Rune
Avatar billede arne_v Ekspert
02. april 2003 - 20:34 #4
Hov.

Det er en INSERT ikke en SELECT.

Så skal du slet ikke kalde res.next();

Det er kun for at hente query resultat.
Avatar billede arne_v Ekspert
02. april 2003 - 20:34 #5
Jeg undrer mig iøvrigt lidt over at det at assigne db.doQuery til
res skulle påvirke db.doQuery.

Det lyder mystisk.
Avatar billede arne_v Ekspert
02. april 2003 - 20:35 #6
Endnu et gæt:

der er en db.doUpdate som do skal bruge i.s.f. db.doQuery til
UPDATE/INSERT/DELETE.

[men stadigvæk uden res.next()]
Avatar billede medions Nybegynder
02. april 2003 - 20:37 #7
Se, det virkede ;o)
Mange tak...

//>Rune
Avatar billede medions Nybegynder
02. april 2003 - 20:41 #8
Arne.. En sidste ting..
Hvordan laver jeg en SELECT der spørger om brugeren findes?

altså fx.

strSQL = "SELECT `username` FROM tblUsers WHERE `username` = '" + request.getParameter("username") + "'";

hvad gør jeg så nu for at se om recorden findes? -og hvis ik' den findes så skal den gøre et eller andet...

//>Rune
Avatar billede arne_v Ekspert
02. april 2003 - 20:45 #9
Du kan udføre den SELECT og så kalde rs.next() den returnerer
true hvis der en record (=bruger eksisterer) og false hvis der ikke
er en record (=bruger eksisterer ikke).
Avatar billede arne_v Ekspert
02. april 2003 - 20:45 #10
res.next()
Avatar billede arne_v Ekspert
02. april 2003 - 20:47 #11
Alternativt kunne du jo lave:
  res = db.doQuery("SELECT COUNT(*) FROM tblUsers WHERE username='" + Request.getParameter("username") + "'");

res.next();
if(res.getInt(1) > 0) {
} else {
}
Avatar billede medions Nybegynder
02. april 2003 - 20:57 #12
Jeg har lige nu flg.

        ResultSet res;
        String strSql;
       
        if(!db.open())
        {
            return;
        }
       
        strSql = "SELECT `username` FROM itarkiv_users WHERE `username` = '" + brugernavn + "'";
        res = db.doQuery(strSql);
       
        res.next();
        if (res.getInt(1) > 0)
        {
            out.println("Brugeren findes allerede!");
        }
        else
        {
            strSql = "INSERT INTO itarkiv_users(`username`,`password`,`fornavn`,`efternavn`,`adresse`,`postnr`,`email`,`web`,`icq`,`msn`,`profiltekst`,`userlevel`,`tid`) VALUES('" + brugernavn + "', '" + password + "', '" + fornavn + "', '" + efternavn + "', '" + adresse + "', '" + postnr + "', '" + email + "', '" + http + "', '" + icq + "', '" + msn + "', '" + profiltekst + "','1' ,now())";
            //db.doUpdate(strSql);
            out.println(strSql);
        }

Men det melder flg. fejl.

500 Servlet Exception
java.sql.SQLException: Invalid value for getInt() - 'test'
    at com.mysql.jdbc.ResultSet.getInt(ResultSet.java:1276)
    at _new._opretbruger__jsp._jspService(C:\Apache\htdocs\itarkiv.dk\new\opretbruger.jsp:182)
    at com.caucho.jsp.JavaPage.service(JavaPage.java:75)
    at com.caucho.jsp.Page.subservice(Page.java:485)
    at com.caucho.server.http.FilterChainPage.doFilter(FilterChainPage.java:182)
    at com.caucho.server.http.Invocation.service(Invocation.java:312)
    at com.caucho.server.http.CacheInvocation.service(CacheInvocation.java:135)
    at com.caucho.server.http.RunnerRequest.handleRequest(RunnerRequest.java:342)
    at com.caucho.server.http.RunnerRequest.handleConnection(RunnerRequest.java:272)
    at com.caucho.server.TcpConnection.run(TcpConnection.java:137)
    at java.lang.Thread.run(Thread.java:536)

//>Rune
Avatar billede arne_v Ekspert
02. april 2003 - 21:00 #13
Hov du har blandet de 2 løsninger.

Enten laver du SELECT username og tester på værdien af res.next()
eller du laver SELECT COUNT(*), laver res.next() og tester på
res.getInt(1).
Avatar billede medions Nybegynder
02. april 2003 - 21:08 #14
Se det var min fejl :-)

-1000 thx!

//>Rune
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