Permalänk
Medlem

Koppla Java till Mysql

Nu får jag mig snart ett bryt på det här. Har följt guider på ett flertalet sidor, men med samma resultat, ingenting fungerar.
Jag vill koppla Java till min MySQL databas så jag kan göra ett program som ska styra min eshop, istället för att använda en admininloggning på hemsidan.

Lite kort om vad jag kör för mjukvara:

Windows Vista Ultimate
MySQL 5.0.51 Community Server
JDK/JRE 1.6.0_05

Alltså det senaste av allt. Jag har inte hittat någon riktig info angående om Vista stödjer allt, men jag tror det. MySQL fungerar som det ska i alla fall.

Jag har då laddat hem Connector\J från MySQL.com och placerat *.jar filen i min Java katalog (C:\Program Files\Java\jre1.6.0_05\lib\ext). Jag har testat med den senaste versionen och även en äldre, men får samma fel.

Jag har lagt in en CLASSPATH i mina miljövariabler som ser ut såhär: .;C:\Program Files\Java\jre1.6.0_05\lib\ext\mysql-connector-java-5.1.6-bin.jar.

Min kod ser ut såhär (nåja, har lånat den från en guide, men verkar korrekt)

import java.sql.*; public class mysql { public static void main (String[] args) { Connection conn = null; try { String userName = "hemlis"; String password = "hemlis"; String url = "jdbc:mysql://localhost/test"; Class.forName ("com.mysql.jdbc.Driver").newInstance (); conn = DriverManager.getConnection (url, userName, password); System.out.println ("Database connection established"); } catch (Exception e) { System.err.println ("Cannot connect to database server"); } finally { if (conn != null) { try { conn.close (); System.out.println ("Database connection terminated"); } catch (Exception e) { /* ignore close errors */ } } } } }

Men jag kan inte ansluta. Det verkar som om den inte vill hitta drivrutinen, com.mysql.jdbc.Driver.
Måste jag göra något med för att få det hela att fungera? In och jäklas med Java något också i någon inställning någonstans?

Vore det någon här som kan hjälpa mig att få ordning på kopplingen så vore jag oerhört tacksam!

Permalänk

Din klasspath är vad jag kan se, fel.

C:\Program Files\Java\jre1.6.0_05\lib\ext\ ska det vara. Inte med filen där.

Permalänk
Medlem

Eftersom du inte skriver exakt vilket fel du får så kan jag bara gissa. Ge alltid så mycket information som möjligt om du förväntar dig få hjälp.

Min gissning i detta fallet är att du glömt:

import com.mysql.jdbc.*

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av hagbarddenstore
Din klasspath är vad jag kan se, fel.

C:\Program Files\Java\jre1.6.0_05\lib\ext\ ska det vara. Inte med filen där.

Ok. Enligt de guider jag hittat så ska den vara med, men jag får såklart testa detta när jag kommer hem från jobbet idag!

Citat:

Ursprungligen inskrivet av Jaif
Eftersom du inte skriver exakt vilket fel du får så kan jag bara gissa. Ge alltid så mycket information som möjligt om du förväntar dig få hjälp.

Min gissning i detta fallet är att du glömt:

import com.mysql.jdbc.*

Jag får inget felmeddelande. Och jag är inte så haj på Java heller, snarare så att jag försöker lära mig. Sitter med JCreator Pro och jag får felmeddelanden om det är något fel i koden, men det får jag inte nu. Så jag vet inte vad jag ska skriva i koden för att få ut något felmeddelande med mysql kopplingen, vet du så kan jag testa?

Permalänk
Medlem

CLASSPATH:en kan se ut så där, det spelar egentligen ingen roll om du hänvisar till en mapp eller till en fil direkt, resultatet blir detsamma om du endast har ett bibliotek i mappen. Så troligtvis ligger inte felet där.

Man ska inte importera drivrutinerna, utan precis som n1mda har gjort läser man in dom i koden med Class.forName().

Vad, exakt, är det som går fel? Som jag förstår det går kompileringen igenom - men utskriften i terminalen när du kör programmet blir "Cannot connect to database server"? Om du skriver ut din stacktrace från det Exception som kastas, kan vi nog komma lite längre.

Har din MySQL-användare rättigheter att koppla mot databasen 'test'? Existerar databasen? (Per default finns ju alltid en test-databas f.ö., men den kanske har plockats bort?)

Permalänk
Medlem

Hur skriver jag ut stacktrace?
Jag testade med att köra följande istället för det där felmeddelandet som är självskrivet : "System.err.println ("Error:" + e);".

Då får jag ut följande:

--------------------Configuration: mysql - JDK version 1.6.0_05 <Default> - <Default>-------------------- Error:java.lang.ClassNotFoundException: com.mysql.jdbc.Driver Process completed.

Permalänk
Medlem

Då verkar det som att den inte hittar dina drivrutiner ivf.

Försök med att flytta ut mysql-connector.jar från lib/ext till t.ex. C:\Java-drivers eller liknande, och anropa den vid kompilering samt körning. Ta även bort den ut din miljövariabel CLASSPATH.

När du sedan kompilerar programmet;

$ javac -cp C:\Java-drivers\mysql-connector.jar TheClass.java

Samt när du kör;

$ java -cp C:\Java-drivers\mysql-connector.jar TheClass

Bara som ett test, för att se vad som egentligen spökar här.

Permalänk
Medlem

Hur anropar jag en drivrutin?

Får ursäkta, men jag är inte så bra på Java. Sitter med värsta feta boken och försöker lära mig. Tänkte jag skulle få en koppling att fungera bara så jag kan ta itu med att lära mig lite mer och göra mitt program.

Permalänk
Medlem

'Anropar' var fel uttryck egentligen, det jag menade var att peka classpath mot drivrutinen manuellt vid kompilering och körning, precis som jag gjorde i mina exempel i förra inlägget. Med växeln -cp till javac.exe och java.exe kan du peka mot externa jar-bibliotek vid kompilering och körning.

Permalänk
Medlem

Mjaha.. jag har alltid kompilierat direkt i JCreator, med en liten fin knapp.

Jag testade att köra med javac, men det kommandot verkar inte finnas öht för mig, vilket är jäkligt skumt?

Permalänk
Medlem

Att javac inte hittas är för att Windows inte hittar javac.exe i någon av de kataloger som är inställda på PATH-variabeln.
(ungefär som javas classpath fast PATH är Windows egna för att leta efter binärer/exekverbara program, och hittas i systemegenskaper-miljövariabler)

Permalänk
Medlem

Har du döpt klassen i mysql.java till 'mysql'? F.ö. bör (ska) klasser starta med en versal och filnamnet ska sedan döpas till den publika klassen i filen.

Mysql.java

public class Mysql { ...

Permalänk
Medlem

Har du en jar i lib/ext så behöver du inte ha den i classpath.

Permalänk
Medlem

Ja, classen heter "mysql". Men jag kan döpa om den och testa igen när jag kommer hem, men det ska väl inte göra någon skillnad.

Men nu kom jag på en sak som är lite galet. JCreator Pro lägger ju mysql.class och mysql.java i två olika kataloger. Inte konstigt man får det där felmeddelandet. Tror jag var lite trött igår.

Men jag får testa det sen, återkommer i eftermiddag.

Racy: Har testat med att ha den där också, men det fungerar inte heller.

Edit:
Ändrat till versaler nu, men får samma fel ändå.

Från mig som okunnig så känns det ju som om den inte vill ladda in drivrutinen av någon anledning. Men jag förstår inte varför. Jag har du drivrutinen i ext mappen också. Så den "ska" ju laddas in.

Permalänk

Varför kör du paketet du laddade ner? Tänker på mysql-connector-java-5.1.6-bin.jar mysql.

I övrigt ska du väl använda flaggan -jar när du ska köra en jar-fil med kommandot java

> java -jar filen.jar

Visa signatur

UNIX/Programmering.

Permalänk
Medlem
Citat:

Ursprungligen inskrivet av Voidhanger
Varför kör du paketet du laddade ner? Tänker på mysql-connector-java-5.1.6-bin.jar mysql.

Vad jag förstått är det en drivrutin som krävs för att koppla java mot en mysql databas. Men har du en annan lösning tar jag tacksamt emot det.

Permalänk
Citat:

Ursprungligen inskrivet av n1mda
Vad jag förstått är det en drivrutin som krävs för att koppla java mot en mysql databas. Men har du en annan lösning tar jag tacksamt emot det.

Ah. Jag har nog ingen erfarenhet av drivrutiner i Java, men jag skulle nog bara köra klassen om jag var du. Om du t.ex. har sparat din kod ovan i MySQL.java, så kör du:

> java MySQL

Förutsätter såklart att du i terminalen står i den katalogen där filen MySQL ligger
EDIT: Förutsätter såklart även att du har kompilerat koden.

Visa signatur

UNIX/Programmering.

Permalänk
Medlem

Vafan... hur är detta möjligt?
Nu fungerar det såklart klockrent, till skillnad från när jag "kör" filen i JCreator.

Varför?

Edit:
Bara för att testa en annan editor så laddade jag hem Eclipse, och då funkar det även när jag kör koden där. Vet inte vad det beror på.. men wtf.. det fungerar.

Tack allihopa för hjälpen!

Permalänk
Citat:

Ursprungligen inskrivet av n1mda
Vafan... hur är detta möjligt?
Nu fungerar det såklart klockrent, till skillnad från när jag "kör" filen i JCreator.

Varför?

Yeah well, jag är ju the shit

Citat:

Ursprungligen inskrivet av n1mda
Edit:
Bara för att testa en annan editor så laddade jag hem Eclipse, och då funkar det även när jag kör koden där. Vet inte vad det beror på.. men wtf.. det fungerar.

Tack allihopa för hjälpen!

Ja, Eclipse är att rekommendera för Java!

Visa signatur

UNIX/Programmering.