webForumDet fria alternativet

problem med SQL - Jsp/Servlet

6 svar · 315 visningar · startad av jme

jmeMedlem sedan maj 20011 967 inlägg
#1

Hej!

Jag har följande problem...

Jag vill koppla upp mig mot en egen MySQL databas.

Gör jag det genom en vanlig Java-applikation så fungerar det utmärkt. Jag kör med jdbc-odbc bridge och med MyODB Connector 3.5.1 drivrutin.

Gör jag samma sak fast genom en Servlet så får jag hela tiden en
java.sql.SQLException angående att Data sorce inte hittas.

Följande kod fungerar bra från ett vanligt Java-program:


Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection connection = DriverManager.getConnection("jdbc:odbc:javahelp");

Samma kod fungerar inte ifrån en .jsp sida.

LimeMedlem sedan sep. 2001837 inlägg
#2

Tjing!

Jag gör antagandet att du kör Tomcat. Om inte så anpassa till din JSP-motor.

Jag har följande installation:
JAVA_HOME=C:\java\jre
TOMCAT_HOME=C:\Tomcat

Först, kopiera MySQL Connector JAR filen till c:\Tomcat\common\lib. Den fil jag använder är mysql-connector-java-2.0.14.jar.

Du hittar den på http://www.mysql.com/downloads/api-jdbc.html om den inte fanns med i MySQL.

Sedan ska du skriva något som liknar detta:

<%@ page import="java.sql.*" %>
<%
String connectionURL = "jdbc:mysql://localhost:3306/mydatabase?user=;password=";
Connection connection = null;
Statement statement = null;
ResultSet rs = null;
%>

<html><body>

<%
Class.forName("com.mysql.jdbc.Driver").newInstance();
connection = DriverManager.getConnection(connectionURL, "", "");
statement = connection.createStatement();
rs = statement.executeQuery("SELECT * FROM mytable");

while (rs.next()) {
out.println(rs.getString("myfield")+"<br>");
}

rs.close();
%>
</body></html>

Den stora skillnaden här är connectionString och att det är en URL.

Självklart måste du byta ut mydatabase och mytable o.s.v. mot dina egna värden.

Testa detta.

jmeMedlem sedan maj 20011 967 inlägg
#3

Tackar så himla mycket! :) Du sparade mig en del tid och förbannelse. ;)

Fick det att funka prima då jag följde dina instruktioner...

Du kopplar upp dig genom

String connectionURL = "jdbc:mysql://localhost:3306/javahelp";

Det visste jag inte riktigt om.

Har själv använt "jdbc:odbc:databasNamn" fast då måste man ange databasen till "Data sources" i Windows.

LimeMedlem sedan sep. 2001837 inlägg
#4

Jo, jdbc:odbc-bryggor funkar skitbra när man kör på samma maskin som databasen eller kan sätt upp en datasource. I JSP och andra webbservices så är det lite knepigare och då måste man använda sig av connectors.

Det tog mig 4 dagar att hitta den informationen. Hoppas jag har sparat dig de dagarna.

jmeMedlem sedan maj 20011 967 inlägg
#5

Äsh! :)
Nu är jag även mer förvirrad. Nu så fungerar MYSQL tillsammans med jsp. Jag har gjort en klass som hanterar uppkopplingen mot databasen samt verifierar användarid samt lösenord.

Men om jag nu vill använda samma klass både genom vanliga Java-program samt genom Tomcat och jsp, hur gör jag det?

Jag förstår lite iaf att Tomcat måste veta vilken drivrutin den skall använda när den skall koppla upp sig mot databasen. Tomcat använder nån JConnector. som jag enligt dina anvisningar kopierade till katalogen c:\Tomcat\common\lib

Men nu har jag lite problem med att få vanliga Java-program att hitta samma drivrutin, dvs "com.mysql.jdbc.Driver".

Jag hittade katalogen där "sun.jdbc.odbc.JdbcOdbcDriver" finns och testade med att kopiera den andra drivrutinen dit men det hjälpte inte. Får då:

"java.lang.ClassNotFoundException: com.mysql.jdbc.Driver"

Eller ska jag helt enkelt skapa en metod som väljer vilken drivrutin den ska använda beroende på om klassen körs genom tomcat eller om den körs genom vanliga java-program?

Hajar inte detta riktigt... :)

ViktorMedlem sedan aug. 20021 710 inlägg
#6

C.L.A.S.S.P.A.T.H :)
Lägg sökvägen till jar filen i din classpath så fungerar det i vanliga Java program också.

Alla filer som ligger i common\lib lägger Tomcat till i sin interna classpath.

/Viktor

jmeMedlem sedan maj 20011 967 inlägg
#7

Hata CLASSPATH! ;)

Jag tyckte jag försökte med det...

Vet inte vad jag gjorde fel. x(

Genererad på 382 ms · cache AV · v20260730165559-full.f96bc7eb