Avatar billede mik28 Seniormester
11. marts 2003 - 17:04 Der er 43 kommentarer og
1 løsning

At opdaterer en DB

Jeg fatter simpelthen ikke hvad der skulle være galt med det her


<%@ page language="java" import="java.util.*,java.sql.*,util.*" %>

<%
String name    = request.getParameter("name");
String homepage = request.getParameter("homepage");
String email    = request.getParameter("email");
String country  = request.getParameter("country");
String comment  = request.getParameter("comment");     

if (name!=null || name==""){

Databaseforbindelsemysqlprepared d = new Databaseforbindelsemysqlprepared("jdbc:mysql://URL/DB?user=USER&password=PASS","org.gjt.mm.mysql.Driver");
       
Vector vi = new Vector();
vi.addElement(name);
vi.addElement(homepage);
vi.addElement(email);
vi.addElement(country);
vi.addElement(comment);
   
d.insertUpdate("INSERT INTO guestbook (name,homepage,email,country,comment) VALUES (?,?,?,?,?)", vi); 
d.close();
}

%>
Avatar billede mik28 Seniormester
11. marts 2003 - 17:06 #1
Databaseforbindelsemysqlprepared klassen ser således ud

package util;
import java.util.Vector;
import java.sql.*;


public class Databaseforbindelsemysqlprepared
{
    private Connection conn ;
    private PreparedStatement pstmt;
       
    public Databaseforbindelsemysqlprepared(String data, String driver)
    {
       
        try
        {
            Class.forName(driver);
            conn = DriverManager.getConnection(data, "", "");

        }
        catch(Exception s)
        {
            System.out.println("SQL dataforbindelse fejlede"+s);
        }   
    }
   
    public ResultSet select(String sql, Vector params)
    {
        ResultSet r = null;
        try
     
        {
        System.out.println("SQL=" + sql);
        PreparedStatement pstmt = conn.prepareStatement(sql);
         
            for (int i=0; i < params.size(); i++) {
            System.out.println("arg " + (i + 1) + "=" + (String)params.elementAt(i));
            pstmt.setString(i+1, (String)params.elementAt(i));
            } 
     
        r = pstmt.executeQuery();
 
        }
        catch(SQLException s)
        {
            System.out.println("Select fejlede: "+s);
        }     
        return r;
    }
   
    public void insertUpdate(String sql, Vector params)
    {
        try
        {
            PreparedStatement pstmt = conn.prepareStatement(sql);         
            for (int i=0; i < params.size(); i++) {
            pstmt.setString(i+1, (String)params.elementAt(i));
            } 
            pstmt.executeUpdate();

        }
        catch(SQLException s)
        {
            System.out.println("update/insert fejlede");
        }       
    }
   
    public void close()
    {
        try
        {
            pstmt.close();
        }
        catch(SQLException s)
        {
            System.out.println("Close fejlede");
        }
       
    }
}
Avatar billede arne_v Ekspert
11. marts 2003 - 17:09 #2
Du har stadig en:
  name==""
Avatar billede arne_v Ekspert
11. marts 2003 - 17:11 #3
Hvad sker der ?

Får du en exception ? Eller ?
Avatar billede mik28 Seniormester
11. marts 2003 - 17:13 #4
Den opdaterer bare ikke databasen :-(
Avatar billede arne_v Ekspert
11. marts 2003 - 17:16 #5
Og du har verificeret at:
  1) insertUpdate bliver kaldt
  2) at der ikke bliver skrevet noget ud p.g.a. en SQLException
?
Avatar billede arne_v Ekspert
11. marts 2003 - 17:17 #6
Lille detalje som næppe har noget med problemet at gøre.

if (name!=null || name==""){

skal vel være:

if (name!=null && !name.equals("")){
Avatar billede mik28 Seniormester
11. marts 2003 - 17:22 #7
Det fatter jeg simpelthen ikke en bønne af :-(
Avatar billede mik28 Seniormester
11. marts 2003 - 17:26 #8
Det virker nogen gange
Avatar billede mik28 Seniormester
11. marts 2003 - 17:28 #9
Den smider en exception som siger at databasen ikke kører (hvilket den gør)
Avatar billede arne_v Ekspert
11. marts 2003 - 17:33 #10
Dyb mystik !

Du har vel ikke en primær-nøgle og når den fejler så er
det fordi den allerede er der i forvejen ?
Avatar billede mik28 Seniormester
11. marts 2003 - 17:34 #11
Jeg har et ID i tabellen som jeg bruger som primærnøgle
Avatar billede arne_v Ekspert
11. marts 2003 - 17:34 #12
Aha.

Den kan ikke connecte til databasen.

Er DB på samme maskine som servlet ? Eller på en anden ?
Avatar billede mik28 Seniormester
11. marts 2003 - 17:34 #13
Den tæller bare en op hver gang der kommer en ny række i
Avatar billede arne_v Ekspert
11. marts 2003 - 17:35 #14
Får du exception allerede ved getConnection eller først
ved executeUpdate ?
Avatar billede mik28 Seniormester
11. marts 2003 - 17:35 #15
det er den samme maskine
Avatar billede mik28 Seniormester
11. marts 2003 - 17:35 #16
allerede ved getconnect
Avatar billede mik28 Seniormester
11. marts 2003 - 17:36 #17
så vidt jeg kan se
Avatar billede mik28 Seniormester
11. marts 2003 - 17:41 #18
Avatar billede arne_v Ekspert
11. marts 2003 - 17:50 #19
Har du prøvet at genstarte JSP/servlet container ?
Avatar billede arne_v Ekspert
11. marts 2003 - 17:50 #20
(og jeg kan ikke se noget under community)
Avatar billede mik28 Seniormester
11. marts 2003 - 17:57 #21
under community skulle der gerne så sign og view guestbook
Avatar billede mik28 Seniormester
11. marts 2003 - 18:01 #22
stå :-)
Avatar billede arne_v Ekspert
11. marts 2003 - 18:07 #23
Jeg kan næsten ikke læse teksten og der sker ikke noget
når jeg klikker på den.

(gammel IE 5.0)
Avatar billede mik28 Seniormester
11. marts 2003 - 18:32 #24
Det er sikkert fordi det er en IFRAME
Avatar billede mik28 Seniormester
11. marts 2003 - 18:32 #25
og fordi teksten er hvid
Avatar billede mik28 Seniormester
11. marts 2003 - 20:31 #26
Jeg har lagt opdateringer over i en servlet nu og det virker sådan set fint nok. Nu virker valideringen af data bare ikke mere :-(
Avatar billede arne_v Ekspert
11. marts 2003 - 20:41 #27
Avatar billede arne_v Ekspert
11. marts 2003 - 20:43 #28
Glem lige det link - det var til en anden tråd.

:-)
Avatar billede mik28 Seniormester
11. marts 2003 - 20:45 #29
Jeg kunne heller ikke lige se sammehængen :-)
Avatar billede arne_v Ekspert
11. marts 2003 - 20:47 #30
D.v.s. at din DB klasse virker i en servlet men ikke i JSP ?

Meget mystisk !

Du kan dog godt ligge data validering ind i en servlet.
Avatar billede arne_v Ekspert
11. marts 2003 - 20:48 #31
Noget i stil med:

check request parameters
if ok {
  insertUpdate
  forward/redirect til OK JSP side
} else {
  forward/redirect til ikke OK JSP side
}

[pseudo-kode]
Avatar billede mik28 Seniormester
11. marts 2003 - 20:49 #32
Jeg har skrevet den op til det her


import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.sql.*;
import util.*;
import java.util.Vector;

public class Updateguestbook extends HttpServlet
    {
       
        public void doPost (HttpServletRequest request,
                      HttpServletResponse response)
        throws ServletException, IOException
        {
        PrintWriter        out;
       
        response.setContentType("text/html");
        out = response.getWriter();   
           
        String name    = request.getParameter("name");
        String homepage = request.getParameter("homepage");
        String email    = request.getParameter("email");
        String country  = request.getParameter("country");
        String comment  = request.getParameter("comment"); 
           
         
           
        out.println("<HTML><HEAD><TITLE>");
        out.println("</TITLE>");
        out.println("</HEAD>");
       
       
        Databaseforbindelsemysqlprepared d = new Databaseforbindelsemysqlprepared("jdbc:mysql://URL/DB?user=USER&password=PASS","org.gjt.mm.mysql.Driver");
       
        Vector vi = new Vector();
        vi.addElement(name);
        vi.addElement(homepage);
        vi.addElement(email);
        vi.addElement(country);
        vi.addElement(comment);
   
        d.insertUpdate("INSERT INTO guestbook (name,homepage,email,country,comment) VALUES (?,?,?,?,?)", vi); 
       

        out.println("<body onload='window.close();'>");
        out.println("</body>");
       
       
//        out.println("<body onload='document.send.submit();');>");
//        out.println("<form name='send' action='Editpage' method='post'>");
//        out.println("<input type='hidden' name='page' value='start'>");
//        out.println("</form></body>");
        out.println("</html>");
       
        out.close();
        d.close();
        }

}
Avatar billede mik28 Seniormester
11. marts 2003 - 20:49 #33
Det virker fint
Avatar billede mik28 Seniormester
11. marts 2003 - 20:52 #34
Jeg gad godt vide hvad jeg gør forkert i jsp ??
Avatar billede arne_v Ekspert
11. marts 2003 - 20:56 #35
Det er relativt almindeligt at man processer form input
i servlets men i.s.f. at bruge out.println i servletten
laver en forward eller redirect til en JSP side.
Avatar billede arne_v Ekspert
11. marts 2003 - 20:57 #36
Og hvordan kan du få fejl i getConnection ?

Den burde være ret ligeglad med om den blev kaldt
fra en servlet eller en JSP.
Avatar billede mik28 Seniormester
11. marts 2003 - 20:58 #37
Det kan også godt være at det ikke var det det gik galt
Avatar billede mik28 Seniormester
11. marts 2003 - 21:13 #38
Det virker i hvert tilfælde som det skal nu. Jeg ville bare hellere have haft det til at virke i jsp
Avatar billede arne_v Ekspert
11. marts 2003 - 21:25 #39
Tja.

Men hvis du vil have det til at virke i JSP, så bliver du nødt til
at blive ved med at forsøge at finde ud af, hvad der går galt hvornår
og hvorfor.
Avatar billede mik28 Seniormester
12. marts 2003 - 13:28 #40
Hvis du kigger på min asp kode og sammenligner den med min servlet, kan du så se hvad der går galt
Avatar billede mik28 Seniormester
12. marts 2003 - 13:28 #41
servleten virker som sagt fint
Avatar billede arne_v Ekspert
12. marts 2003 - 13:40 #42
Nej. Det ser jo meget ens ud.
Avatar billede mik28 Seniormester
12. marts 2003 - 13:41 #43
Ja ikke :-)
Avatar billede mik28 Seniormester
11. april 2003 - 14:40 #44
lukker, oprydning
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