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
Annonceindlæg fra Partnertekst
19. oktober 2001 - 14:43
#1
kig på side 368 i den bog jeg lige har givet dig :-)
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 ?
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
19. oktober 2001 - 14:57
#4
smider den en exception en af stederne?
19. oktober 2001 - 15:01
#5
Jeg får en NullPointerException da der ikke oprettes forbindelse til databasen
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)
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
19. oktober 2001 - 15:16
#8
og din driver er din classpath på serveren?
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?
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
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
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
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
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
19. oktober 2001 - 15:42
#15
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
19. oktober 2001 - 15:46
#17
Jeg har ellers lagt driveren hvorsom helst på min maskine også i web-inf/classes
19. oktober 2001 - 15:47
#18
også i web-inf/lib?
19. oktober 2001 - 15:49
#19
OK - jeg havde ikke en lib mappe, men har nu oprettet den og lagt driveren der - samme problem
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
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.
19. oktober 2001 - 16:08
#22
ok tak
Kurser inden for grundlæggende programmering