Avatar billede milpoer Nybegynder
21. november 2001 - 10:03 Der er 29 kommentarer og
1 løsning

Connect til MySQL Database

<MiLpOer>

Hej Venner..

Jeg sidder og skal bruge en connection til en MySQL database, jeg ved ikke hvordan det skal gøres.

Jeg vil gerne have en god beskrivelse, da jeg er helt ny i faget hvad connection til mysql Database har at gøre.

Håber der er hjælp at hente.!

</MiLpOer>
Avatar billede disky Nybegynder
21. november 2001 - 10:07 #1
download en jdbc driver, du kan finde en via www.mysql.com

og brug så denne klasse til at connecte,
import java.sql.*;

/**
*
* @author  srr
* @version
*/
public class dbHandler extends Object
{
   
    private Connection con=null;

    /** Creates new DataBase */
    public dbHandler()
    {
    }

    public boolean open(String dbDriverName, String dbClassName, String user, String pass)
    {           
//        System.out.println(\"************************************************************************\");
        try
        {
            if(con==null)
            {
                Class.forName(dbDriverName).newInstance();
                con = DriverManager.getConnection(dbClassName, user, pass);
//                System.out.println(\"con = \"+con);
            }
        }
        catch (SQLException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (InstantiationException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        return true;
    }
   
    public void close()
    {
        if(con!=null)
        {
            try
            {
                con.close();
                con=null;
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
    }
   
    public int doUpdate(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
//                System.out.println(\"SQL Update = \"+(System.currentTimeMillis()-time)+\" ms  \"+sql);
                return stat.executeUpdate(sql);       
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return 0;
    }

    public ResultSet doQuery(String sql)
    {
        if(con!=null)
        {
            try
            {
                long time=System.currentTimeMillis();
                Statement stat=con.createStatement();
//                System.out.println(\"SQL Update = \"+(System.currentTimeMillis()-time)+\" ms  \"+sql);
                return stat.executeQuery(sql);       
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return null;
    }
}





og denne klasse til at bruge den med


public class Database extends dbHandler
{
   
    /** Creates new Database */
    public Database()
    {
    }

    public boolean open()
    {
        return super.open(\"org.gjt.mm.mysql.Driver\",\"jdbc:mysql://SERVERNAME/DATABASENAVN\",\"USERNAME\",\"PASSWORD\");
    }
}

ret det med uppercase
Avatar billede Syska Mester
21. november 2001 - 10:08 #2
Er det gennem Jave du skal have lavet den connection eller et andet sprog???
Avatar billede milpoer Nybegynder
21. november 2001 - 10:09 #3
Det er gennem Java..!
Avatar billede disky Nybegynder
21. november 2001 - 10:11 #4
buzz: check lige hvilken channel vi er på, jeg gætter på det er nok ikke delphi siden han spørger i en JAVA grupper :-)
Avatar billede milpoer Nybegynder
21. november 2001 - 10:41 #5
Jeg for fejl når jeg vil oprette en ny driver.

MySQL.java:15: cannot resolve symbol
symbol  : class Driver 
location: package mysql
                    DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
                                                       
Avatar billede disky Nybegynder
21. november 2001 - 10:46 #6
du skal ikke oprette den du skal bruge:


Class.forName(\"org.gjt.mm.mysql.Driver\").newInstance();


Avatar billede milpoer Nybegynder
21. november 2001 - 10:50 #7
Sådan ser min kode ud kan du se nogle fejl..

/* Connection to MySQL Datebase */
// By Tomas N. MIkkelsen

import java.sql.*;
import java.util.*;

public class MySQL{
 
    public static Connection connector (String user_name, String password)
        throws SQLException
        {
        Connection conn = null;
        try {
           
            Class.forName(\"org.gjt.mm.mysql.Driver\").newInstance();
            //            DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());
            String url = \"jdbc:mysql:@fyr.cs.auc.dk/rema1000\";
           
            conn = DriverManager.getConnection (url,
                            user_name,
                            password);
        }
        catch (SQLException e) {
            System.err.println (e) ;
        }
        return conn;
        }
}

Når jeg kompiler for jeg disse to fejl.

[peta]> javac MySQL.java
MySQL.java:15: unreported exception java.lang.ClassNotFoundException; must be caught or declared to be thrown
                    Class.forName(\"org.gjt.mm.mysql.Driver\").newInstance();
                        ^
MySQL.java:15: unreported exception java.lang.InstantiationException; must be caught or declared to be thrown
                    Class.forName(\"org.gjt.mm.mysql.Driver\").newInstance();
                                ^
2 errors
Avatar billede disky Nybegynder
21. november 2001 - 10:53 #8
netop se mit eksempel, du skal catch\'e de exceptioen.

og du behøves ikke at registerDriver()
Avatar billede milpoer Nybegynder
21. november 2001 - 10:57 #9
Hvor er det mere præcist at jeg rigistreDriver();
Avatar billede disky Nybegynder
21. november 2001 - 10:59 #10
fjern:DriverManager.registerDriver(new org.gjt.mm.mysql.Driver());

og catch de exceptions
Avatar billede milpoer Nybegynder
21. november 2001 - 11:03 #11
Jeg ved ikke helt hvad du mener.. her er min kode som den ser ud lige nu... Jeg har stadig de to kompile fejl. Vil du ikke skrive hvor jeg har mine fejl.. evt. rette i det.


/* Connection to MySQL Datebase */
// By Tomas N. MIkkelsen

import java.sql.*;
import java.util.*;

public class MySQL{
 
    public static Connection connector (String user_name, String password)
        throws SQLException
        {
        Connection conn = null;
        try {
            Class.forName(\"org.gjt.mm.mysql.Driver\").newInstance();
            String url = \"jdbc:mysql:@fyr.cs.auc.dk/rema1000\";
            conn = DriverManager.getConnection (url,
                            user_name,
                            password);
        }
        catch (SQLException e) {
            System.err.println (e) ;
        }
        return conn;
        }
}
Avatar billede disky Nybegynder
21. november 2001 - 11:05 #12
import java.sql.*;
import java.util.*;

public class MySQL{
 
    public static Connection connector (String user_name, String password)
        throws SQLException
        {
        Connection conn = null;
        try {
            Class.forName(\"org.gjt.mm.mysql.Driver\").newInstance();
            String url = \"jdbc:mysql:@fyr.cs.auc.dk/rema1000\";
            conn = DriverManager.getConnection (url,
                            user_name,
                            password);
        }
        catch (SQLException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (InstantiationException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace(System.out);
            return false;
        }
        return conn;
        }
}
Avatar billede milpoer Nybegynder
21. november 2001 - 11:09 #13
De fire steder hvor der stå return false har denne fejl når jeg kompiler.

MySQL.java:61: incompatible types
found  : boolean
required: java.sql.Connection
            return false;
Avatar billede disky Nybegynder
21. november 2001 - 11:12 #14
okay da :)

Fjern \'return false;\' alle 4 gange
Avatar billede milpoer Nybegynder
21. november 2001 - 11:39 #15
nu virker det vi har lavet til nu..

hvordan udføre jeg så en statement som fx.

\"select * from DB\";

Og hvordan lukker jeg en forbindelse..
Avatar billede disky Nybegynder
21. november 2001 - 12:07 #16
du bruger:

    public ResultSet doQuery(Connector conn, String sql)
    {
        if(conn!=null)
        {
            try
            {
                Statement stat=conn.createStatement();

                return stat.executeQuery(sql);       
            }
            catch (SQLException e)
            {
                e.printStackTrace(System.out);
            }
        }
        return null;
    }


den returnerer så et ResultSet som du har resultaterne i.
Avatar billede cs_henrik Nybegynder
21. november 2001 - 12:09 #17
Først bruger du den connection du har lavet til at oprette et objekt af klassen Statement:

Connection connection = connector(\"USER\", \"PASS\");
Statement statement = connection.createStatement();

Nu er du klar til at lave sql-statements. Et SQL-statement, der forventes at give et resultat i form af rækker, laver du ved hjælp af et kald til

statement.executeQuery(\"SQL-STATEMENT\");

Denne metode returnerer resultatet i et såkaldt ResultSet.

Hvis du vil lave en \"SELECT * FROM db\" skal du alt i alt skrive:

ResultSet rs = statement.executeQuery(\"SELECT * FROM db\");

For at trække data ud af et ResultSet kan du bruge det følgende:

while (rs.next()) //rs.next() tager den næste række
{
  String test = rs.getString(\"COLUMNNAME\");
  System.out.println(test);
}

Mvh. Henrik
Avatar billede cs_henrik Nybegynder
21. november 2001 - 12:11 #18
disky -> Jeg så ikke dit sidste svar...
Avatar billede milpoer Nybegynder
21. november 2001 - 12:31 #19
Nu ser min kode sådan ud men jeg for fejl ved koden...

ResultSet rs = statement.executeQuery(\"INSERT (100,200) VAlUES (genATP,genHoliAllow) INTO GeneralTaxes\");

Den skriver denne fejl..

MySQL.java:45: cannot resolve symbol
symbol  : variable statement 
location: class MySQL
        ResultSet rs = statement.executeQuery(\"INSERT (100,200) VAlUES (genATP,genHoliAllow) INTO GeneralTaxes\");
                      ^
1 error


import java.sql.*;
import java.util.*;

public class MySQL{
 
    public static Connection connector (String user_name, String password)
        throws SQLException
        {
        Connection conn = null;
        try {
            Class.forName(\"org.gjt.mm.mysql.Driver\").newInstance();
            String url = \"jdbc:mysql:@fyr.cs.auc.dk/rema1000\";
            conn = DriverManager.getConnection (url,
                            user_name,
                            password);
        }
        catch (SQLException e)
        {
            e.printStackTrace(System.out);

        }
        catch (ClassNotFoundException e)
        {
            e.printStackTrace(System.out);

        }
        catch (InstantiationException e)
        {
            e.printStackTrace(System.out);

        }
        catch (IllegalAccessException e)
        {
            e.printStackTrace(System.out);
       
        }
        return conn;
        }
    public static void main(String[] args){
    ResultSet rs = statement.executeQuery(\"INSERT (100,200) VAlUES (genATP,genHoliAllow) INTO GeneralTaxes\");


    }
Avatar billede disky Nybegynder
21. november 2001 - 12:34 #20
din sql er forkert byt rundt på indholdet i dine 2 paranteser.

og du skal bruger den metode eller det den laver, du forsøger at kalde en database forbindelse uden at have åbnet den først.
Avatar billede milpoer Nybegynder
21. november 2001 - 12:44 #21
Hvordan laver jeg så den connection..?
Avatar billede disky Nybegynder
21. november 2001 - 12:49 #22
med din connector() metode

p.s. på www.javasoft.com er der nogle udemærkede tutorials om jdbc osv.
Avatar billede milpoer Nybegynder
21. november 2001 - 14:24 #23
jeg kan ikke få den til at hente database driveren hvor de ligger.. hvordan gøre dette.. ¨

Der ligger en fil under min classpath som hedder mm.mysql-2.0.4-bin.jar hvad skal der skrives.
i den linie som hedder
Class.forName(\"MYSQLDRIVER\").newInstance();

Altså hvad skal der stå.. filen ligger som sagt i classpath\'en ...
Avatar billede disky Nybegynder
21. november 2001 - 14:27 #24
du skal skrive det som jeg har skrevet i mit eksempel.

du SKAL have den mysql jar fil specifikit nævnt i din classpath, det er ikke nok den er i et dir som er med.
Avatar billede milpoer Nybegynder
21. november 2001 - 14:30 #25
hvad så når min fil hedder mm.mysql-2.0.4-bin.jar
så der så stadig stå


Class.forName(\"org.gjt.mm.mysql.Driver\").newInstance();
????
Avatar billede disky Nybegynder
21. november 2001 - 14:32 #26
ja for inde i den jar fil er der et pakkehiraki hvor driveren er gemt i

org\\gjt\\mm\\mysql\\ skuffen
Avatar billede milpoer Nybegynder
21. november 2001 - 14:35 #27
Jeg for ingen kompile fejl men når jeg vil køre filen med java filnavn.java for jeg følgende fejl.. Kan du hjælpe.

java.lang.ClassNotFoundException: org.gjt.mm.mysql.Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:297)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:286)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:253)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:313)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:120)
        at MySQL.connector(MySQL.java:17)
        at MySQL.main(MySQL.java:49)
Exception in thread \"main\" java.lang.NullPointerException
        at MySQL.main(MySQL.java:50)


Avatar billede milpoer Nybegynder
21. november 2001 - 14:49 #28
Nu har jeg fået lavet min classpath rigtigt det var det der var skyld i ovenstående fejl.. men nu fopr jeg denne fejl. Kan du hjælpe ?

java.sql.SQLException: No suitable driver
        at java.sql.DriverManager.getConnection(DriverManager.java:537)
        at java.sql.DriverManager.getConnection(DriverManager.java:177)
        at MySQL.connector(MySQL.java:19)
        at MySQL.main(MySQL.java:49)
Exception in thread \"main\" java.lang.NullPointerException
        at MySQL.main(MySQL.java:50)
Avatar billede disky Nybegynder
21. november 2001 - 14:55 #29
brug min klasse den virker med 100% sikkerhed.
Avatar billede milpoer Nybegynder
21. november 2001 - 15:12 #30
Tak.. for hjælpen du har gjort mere en rigeligt.. men det virke stadig ikke.. jeg er så langt med min egen klasse og derfor vil jeg gerne kunne arbejde videre på den...

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