Avatar billede stine_grith Nybegynder
19. oktober 2001 - 14:39 Der er 21 kommentarer og
1 løsning

servlet & MySQL

Hvordan opretter man forbindelse fra en servlet til en database?

Jeg har forsøgt noget med at oprette forbindelsen til databasen når servletobjektet skabes - dvs med en init(), en destroy() samt en doGet( bla bla ) - problemet er at jeg ikke får forbindelse til databasen


/Stine

Avatar billede stig69 Nybegynder
19. oktober 2001 - 14:43 #1
kig på side 368 i den bog jeg lige har givet dig :-)
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 14:46 #2
Du kan lave en bean til at håndtere dette og så kalde denne.

Disky har giver løsningen på problemet op til flere gange, så prøv at kigge lidt i kategorierne java og jsp, der finder du det sikkert.

Hvad er problemet helt konkret, kan vi se noget kode ?
Avatar billede stine_grith Nybegynder
19. oktober 2001 - 14:51 #3
Her har du koden -

public class ReadDBServlet extends HttpServlet {
  final static String url = \"\";
  final static String usr = \"\";
  final static String pwd = \"\";
   
 
  Connection  db;            // The connection to the database
  Statement    st;            // A statement to run queries with
 
  // Åbn forbindelsen til databasen når servlet-objektet skabes
  public void init(ServletConfig config,ServletOutputStream out  ) throws ServletException {
    super.init(config);
    try {
        out.print(\"init<br>\");
    }catch(Exception e) {
      System.out.println(\"init: \" + e);
    }
    try {
      Class.forName(\"org.gjt.mm.mysql.Driver\");     
   
      db = DriverManager.getConnection(url, usr, pwd);
      st = db.createStatement();
    } catch (ClassNotFoundException e) {
      System.out.println(\"Cannot find the \'org.gjt.mm.mysql.Driver\'\");
    } catch (SQLException e) {
      System.out.println(\"Database error: \" + e);
    }
  }
 

  // Luk forbindelsen til databasen når servlet-objektet nedlægges
  public void destroy() {
    try {
      st.close();
      db.close();
    } catch (SQLException e) {
      System.out.println(\"Database error: \" + e);
    }
  }

  // Læs det aktuelle indhold fra tabellen Student
  public void doGet(HttpServletRequest req, HttpServletResponse res)
    throws ServletException, IOException {
    res.setContentType(\"text/html\");
    ServletOutputStream out = res.getOutputStream();
    out.println(\"start<br>\");

    try {
        init();
      String query = \"SELECT * FROM Bruger WHERE efternavn = \'kjeldsen\';\";
      out.println(\"før execute\");
      st.execute(query);
        out.println(\"efter execute\");
      out.println(\"<HTML><TITLE>Billeder</TITLE><BODY>\");
      out.println(\"<H2>Billeder</H2><P>\");
      out.println(\"\");
      ResultSet rs = st.getResultSet();
      while (rs.next()) {String bnr = rs.getString(\"bnr\");
            String url = rs.getString(\"url\");
            System.out.println(\"Har hentet fra databasen: \" + bnr + \" og url: \" + url);
      }
      out.println(\"</BODY></HTML>\");
    } catch (SQLException e) {
      System.out.println(\"Database error: \" + e);
    }
  }
}

faktisk har jeg søgt på eksperten for at finde en løsning - men fandt ikke noget jeg kunne bruge

Avatar billede mipe1 Nybegynder
19. oktober 2001 - 14:57 #4
smider den en exception en af stederne?
Avatar billede stine_grith Nybegynder
19. oktober 2001 - 15:01 #5
Jeg får en NullPointerException da der ikke oprettes forbindelse til databasen
Avatar billede zoner Nybegynder
19. oktober 2001 - 15:03 #6
prøver du med en bruger, der har adgang fra den host, du kalder fra?

prøv med mysql -h dinhost -u dinbruger -p 
:ditpassword

fra den maskine du kalder fra(der hvor din servlet container ligger på). Så skulle du kunne finde ud af om du har adgang.

kig rundt på nettet efter mysql tutorials hvis du  skal fixe adgangen :o)
Avatar billede stine_grith Nybegynder
19. oktober 2001 - 15:04 #7
jeg har adgang fra min maskine - jeg har lavet et andet program i dospromt som får fin forbindelse, det er min servlet der ikke kan få forbindelse til databasen
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 15:16 #8
og din driver er din classpath på serveren?
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 15:18 #9
den jar fil hvor org.gjt.mm.mysql.Driver ligger i skal være i classpath, somregel i folderen web-inf/classes eller være angivet i konfigurationen til serveren.

Hvad er det for en server?
Avatar billede stine_grith Nybegynder
19. oktober 2001 - 15:23 #10
serveren er en tomcat - jeg mener at driveren skulle være rigtig, men hvordan finder jeg ud af det?

Når jeg går ind på serveren via ssh, får jeg nemlig fin forbindelse til databasen
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 15:26 #11
Kan du se om det er denne linie der smider en exception
Class.forName(\"org.gjt.mm.mysql.Driver\");     

Har du prøvet at fjerne det hele fra init og smide det ned i get, bare lige for at udelukke om det er problemer med init
Avatar billede stine_grith Nybegynder
19. oktober 2001 - 15:36 #12
ved at fjerne alt fra init og smide det i get- får jeg samme fejl, dvs programmet stopper ved kaldet af databasen

Avatar billede stine_grith Nybegynder
19. oktober 2001 - 15:38 #13
mipe1>>Du havde ret, det er driveren der er giver fejl. Hvor finder jeg en driver jeg kan anvende
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 15:41 #14
jamen driver er vel god nok er det ikke bare fordi den ikke kan finde den, det plejer at være problemet
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 15:42 #15
men ellers kan den hentes her
http://mmmysql.sourceforge.net/
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 15:44 #16
har du ikke en folder der hedder web-inf/classes hvor din servlets ligger?

Nå ja skrev vist før at driveren skal ligge i denne folder, det er istedet for web-inf/lib den skal ligge i
Avatar billede stine_grith Nybegynder
19. oktober 2001 - 15:46 #17
Jeg har ellers lagt driveren hvorsom helst på min maskine også i web-inf/classes
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 15:47 #18
også i web-inf/lib?
Avatar billede stine_grith Nybegynder
19. oktober 2001 - 15:49 #19
OK - jeg havde ikke en lib mappe, men har nu oprettet den og lagt driveren der - samme problem
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 15:57 #20
det burde være nok at smide driveren i
WEB-INF/lib/

Har du kigget her http://jakarta.apache.org/tomcat/ efter hjælp ?

Og tomcat har været stoppet og startet, det er der vistnok noget med at man skal gøre
Avatar billede stine_grith Nybegynder
19. oktober 2001 - 16:05 #21
>> lav lige et svar - af en art. Nu da jeg har fået minimeret problemet til at det er driverens placering lukker jeg spm - men du skal have point for din hjælpsomhed.
Avatar billede mipe1 Nybegynder
19. oktober 2001 - 16:08 #22
ok tak
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