[JAVA] MySQL Connector

Pagina: 1
Acties:
  • 134 views sinds 30-01-2008
  • Reageer

  • Crazybyte
  • Registratie: Juli 2002
  • Laatst online: 06-05 13:07
Beste Gotters/Tweakers,

Voor school moeten wij een Java applicatie maken voor een reisbureau, dit lukt gelukkig al aardig. Echter moeten we deze applicatie koppelen met een database en daar lopen we constant tegen problemen aan.

De bedoeling was eerst om dit met een PostgreSQL database te doen, echter leverde dit zoveel problemen op, omdat de school hun zaken niet in orde had, dat we besloten hadden om uit te wijken naar een MySQL database. Deze draait en alles wat erin moet staan, staat erin.

Om gemakkelijk de connectie te testen heb ik op een van de project pc's EASYPHP1-7 geinstalleerd. Vervolgens heb ik MySQL Connector/J gedownload en de .jar file gekopieerd naar het JBuilder/JDK1.3.1/jre/lib/ext/, zoals in de documentatie van MySQL beschreven staat.

Dan word er uitgelegd dat je de driver moet registreren met SET PATCHCLASS, voor windows. Echter de uitleg geld voor Windows 9X en wij gebruiken Windows XP en ik krijg de driver dus helaas ook niet werkende.

Binnen de klas hebben we al rond gevraagd, maar veel mensen hebben problemen met de connectie tussen Java & MySQL.

Leraren vragen heeft geen zin, die snappen er zelf maar de helft van (lang leve Fontys...). Ik vraag me af of we iets over het hoofd zien of dat het totaal anders moet, maar kom er gewoon niet uit.
Ik hoop dat iemand van jullie ons zou kunnen helpen, hoe we dit aan de praat krijgen, omdat het essentieel onderdeel van 't project is.

Bijvoorbaat dank,

Crazy

  • Nick_S
  • Registratie: Juni 2003
  • Laatst online: 10-05 16:41

Nick_S

++?????++ Out of Cheese Error

Volgens mij staat alles hier helder uitgelegd:

http://dev.mysql.com/doc/connector/j/en/index.html

[edit] Ik zie nu dat je problemen hebt met je classpath (ipv. patchclass :) ) onder JBuilder. Probeer daar dan even op te zoeken met google of in de JBuilder helpfiles.

[ Voor 47% gewijzigd door Nick_S op 18-01-2005 12:53 ]

'Nae King! Nae quin! Nae Laird! Nae master! We willna' be fooled agin!'


  • MisterData
  • Registratie: September 2001
  • Laatst online: 16-05 23:29
Je kunt de CLASSPATH environment variabele onder XP/2000/NT aanpassen door rechts te klikken op Deze Computer -> Eigenschappen -> Geavanceerd -> Omgevingsvariabelen. De vraag is of het wel slim is om daar je classpath aan te passen. Misschien kun je beter de .jar in de classpath gooien als je je Java-applicatie gaat draaien: gewoon java -cp mysql.jar .... zorgt ervoor dat mysql.jar aan de classpath wordt toegevoegd, zonder dat je een system-wide environment variabele dat laat bepalen :)

  • SPee
  • Registratie: Oktober 2001
  • Laatst online: 16-05 16:59
Als die MySQL database ook niet blijkt te werken (zoals je zei: school :) )
gebruik dan ODBC. Kun je met elke ODBC complient database connecten. :)

let the past be the past.


Verwijderd

Je kunt gewoon de driver downloaden van MySQL. Dan pak je de com-folder uit de zip en die zip je in een nieuw bestand, plaatst daar een mapje META-INF bij. Zet een bestand MANIFEST.MF in dat nieuwe mapje met als body:
Manifest-Version: 1.0
(vergeet geen enter aan het eind te zetten daar java enkel zinnen leest die met een enter eindigen).
Rename je nieuwe zipje naar MySQL-Driver.jar (langleve de nieuwere jdk's die een zip-indeling voor een jar ook prima vinden). Zet je nieuwe jar in de classpath, door de volgende zin toe te voegen in de manifest.mf van je eigen jar:
Class-Path: MySQL-Driver/MySQL-Driver.jar
En het werkt als een trein :)

(je kunt natuurlijk ook de com-map mee compileren in je eigen jar (lees copy-pasten naar jouw project en voortaan meecompileren), maar dan ben je gedwongen je hele project onder de GNU-licentie uit te brengen, niet dat dat voor school iets uitmaakt, maar toch).

Hoe je die classpath onder JBuilder zet moet je maar even in de help kijken (of je copy past dat mapje, hoef je ook geen classpath te zetten).

Ow, code:
Java:
1
2
3
4
5
6
7
String url = "jdbc:mysql://localhost/databasename";
ResultSet rs; 
Class.forName("com.mysql.jdbc.Driver").newInstance();   

con = DriverManager.getConnection(url, "MysqlUserName", "MySQLPassword"); 
stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,
      ResultSet.CONCUR_READ_ONLY);

Succes

(vergeet niet eerst de MySQL-server op te starten, anders vindt ie bar weinig...)

edit:
Maak een abstracte methode genaamd MySQL ofzo, dan kun je die extenden tot twee concrete klassen: MySQLDriver en MySQLODBC. Is je leraar ook weer extra trots en kun je beide manieren eens uit proberen (mits je rechten hebt)

[ Voor 10% gewijzigd door Verwijderd op 18-01-2005 14:58 ]


  • Crazybyte
  • Registratie: Juli 2002
  • Laatst online: 06-05 13:07
We hebben vandaag nog een aantal zaken geprobeerd nog omdat we tegen wat zaken aanliepen die niet geheel bleken te kloppen. Ik heb wel de handleiding van mysql gevolgd om de connector erin te zetten.

Even kort wat we gedaan hebben:
* Database driver gekopieerd naar Jbuilder/lib
* import com.mysql.jdbc.*;

De volgende functie zou de connectie moeten maken:
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
/* Functie - Database connectie openen */
    public void databaseConnect(String username, String password, String host, String db)
    {
        db_user = username;
        db_pass = password;
        db_host = host;
        db_name = db;

        try
        {
            // Driver registeren
            Class.forName("com.mysql.jdbc.Driver");//.newInstance();

            // Connectie informatie
            cs = "jdbc:mysql://"+db_host+"/"+db_name;
            System.out.println(cs);

            // Connectie maken
            conn = DriverManager.getConnection(cs,db_user,db_pass);
            stat = conn.createStatement();
        }
        catch (Exception ex)
        {
            System.out.println( "An exception has been intercepted, during Databse_Connect" );
        }
    }


Naar onze mening zou dit gewoon moeten kunnen, echter geeft Jbuilder constant de melding over een java/sql/Savepoint.

Dit hebben we opgezocht en bleek dat deze pas in versie 1.4 van JDK zit en Jbuilder6 gebruikt JDK3. Oplossing: we gebruiken een eerdere Connector die geen gebruikt maakt van Savepoint. Dus we hebben versie 2 van Connector/J geimport.

Echter blijft Jbuilder het volgende geven:
Exception occurred during event dispatching:
java.lang.NoClassDefFoundError: java/sql/Savepoint
at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:268)
at java.sql.DriverManager.getConnection(DriverManager.java:517)
at java.sql.DriverManager.getConnection(DriverManager.java:177)
at farandaway.Database_sql.databaseConnect(Database_sql.java:43)
at farandaway.testDb.jButton1_mouseClicked(testDb.java:67)
at farandaway.testDb$1.mouseClicked(testDb.java:56)
at java.awt.AWTEventMulticaster.mouseClicked(AWTEventMulticaster.java:211)
at java.awt.Component.processMouseEvent(Component.java:3718)
at java.awt.Component.processEvent(Component.java:3544)
at java.awt.Container.processEvent(Container.java:1164)
at java.awt.Component.dispatchEventImpl(Component.java:2593)
at java.awt.Container.dispatchEventImpl(Container.java:1213)
at java.awt.Component.dispatchEvent(Component.java:2497)
at java.awt.LightweightDispatcher.retargetMouseEvent(Container.java:2451)
at java.awt.LightweightDispatcher.processMouseEvent(Container.java:2230)
at java.awt.LightweightDispatcher.dispatchEvent(Container.java:2125)
at java.awt.Container.dispatchEventImpl(Container.java:1200)
at java.awt.Component.dispatchEvent(Component.java:2497)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:339)
at java.awt.EventDispatchThread.pumpOneEventForHierarchy(EventDispatchThread.java:131)
jdbc:mysql://localhost/faa
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:98)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:85)
Vanavond probeer ik verder te gaan en ga ik zeker nog het gene wat The_Tzar gepost heeft uitproberen of ik het daarmee wil aan de praat krijg. Misschien zie ik dingen over het hoofd, wat best goed zou kunnen aangezien java niet mijn favoriete taal is. Maar ja school...

Verwijderd

java/sql/Savepoint bestaat dus niet. Dat wil dus zeggen dat in de klasse Savepoint in de standaard package java.sql.*; niet aanwezig is.
Die zit er in sinds jdk 1.4, dus zolang je die foutmelding krijgt heeft je driver de jdk 1.4 nodig.

Mijn verhaal van eerder zou ik verder negeren. Ik zie dat je de com.mysql.* in ieder geval al kunt aanspreken, en zolang het niet commercieel gedistributeerd hoeft te worden en je met de licenties van MySQL rekening moet gaan houden, werkt het tot zover dus prima.

Je hebt nu dus drie opties:
- door zoeken totdat je een com-mapje vindt met een MySQL-driver die niet minimaal JDK 1.4 nodig heeft.
- Minimaal JDK 1.4 downloaden, installeren en gaan gebruiken (als niemand eist dat het op een lagere JDK moet werken, meteen doen ! je kunt JBuilder dan gewoon vertellen dat hij de nieuwe JDK moet gebruiken ) Denk maar zo, hoe hoger de JDK, hoe meer gemak voor de programmeur (uitzonderingen daar gelaten)
- Niet via de MySQL-Driver maar via ODBC-JDBC connecten.

[ Voor 14% gewijzigd door Verwijderd op 18-01-2005 15:33 ]


  • Crazybyte
  • Registratie: Juli 2002
  • Laatst online: 06-05 13:07
The_Tzar ik ben nu thuis en hier heb ik JBuilder 2005 en in deze zit standaard JDK 1.4, ook staat op mijn PC, JDK 1.4.x zelf al geinstalleerd.

Dus leek 't mij verstandig om simpelweg die driver weer in Borland/JBuilder2005/lib te zetten. Alleen nu lijkt ie dat niet te slikken, terwijl we dat vanmiddag op dezelfde manier gedaan hebben. Ik kan namelijk alleen maar dit vinden:

Java:
1
2
import com.sun.*; // zit verder niks waardevols in
import com.*;


Enige verklaring hiervoor?

Verwijderd

Hoi, ik heb zelf al weer een tijdje niet met JBuilder gewerkt, dus ik weet niet zo 123 hoe JBuilder de classpath zet. Je kunt natuurlijk altijd de com-folder uit de driver gewoon tussen je projectfiles zetten. Als het goed is zou ie dat moeten zien als een package van jouw project. Zodra je com.mysql. kunt vinden heb je het voor elkaar :)

edit:
Heb hier thuis nog JBuilder 9 geïnstalleerd staan, dus even gekeken. Moet zeggen dat het heel wat complexer in elkaar zit dan Eclipse waar ik de laatste tijd in heb geprogrammeerd, maar voor zover ik begrijp moet je code in een lib-directory zetten en die lib-directory bij project properties weer aan je project toevoegen en dan kun je daar weer op dubbelklikken om te kijken of het nog wel klopt ofzo

[ Voor 38% gewijzigd door Verwijderd op 18-01-2005 22:09 ]

Pagina: 1