Avatar billede ascii Nybegynder
05. februar 2002 - 20:53 Der er 12 kommentarer og
2 løsninger

Connecte til MySQL

Jeg skal lave en forbindelse til en MySQL-database, og har følgende spørgsmål.
Først lidt kode

import java.sql.*;

public class MakingThe Connection
{
  public static void main(String[] args
  {
  //load the driver
  try {
        //Load the driverClass
          Class.forName("org.gjt.mm.mysql.Driver");

        //Define data source for the driver
          String sourceURL = "????????????:run.db"

Mysql ligger i roden af mit C drev  C:\mysql\
Min database hedder run.db       
Så  kommer spørgsmålene:
1: Hvilken driver skal jeg anvende, og hvor skal den ligge?
2:Hvad skal der stå i String sourceURL??
3:Når jeg kompilere hvad skal Source og output stå til?

Håber der er en der kan hjælpe mig.
Avatar billede kama Nybegynder
05. februar 2002 - 21:02 #1
1) Brug MM.MySQL: http://sourceforge.net/project/showfiles.php?group_id=15923
2) Læg den i %JAVA_HOME%\jre\lib\ext
3) Søg her på eksperten om at connecte til MySQL. Der findes et utal af spørgsmål/svar.
Avatar billede disky Nybegynder
06. februar 2002 - 08:53 #2
Hent denne driver:
http://www.mysql.com/Downloads/Contrib/mm.mysql-2.0.4-bin.jar

Læg den i din classpath

Brug 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 ascii Nybegynder
07. februar 2002 - 15:02 #3
disky..  Nej faktisk ikke.
Fårstår ikke helt hvor jeg skal ligge driveren.
1. Skal jeg ligger org i mit dir??
2. Hvordan laver jeg en Classpath??

Hvis jeg laver nr 1, hvordan skal mit dir så se ud?? MySQL ligger i C:\mysql

Class.forName("org.gjt.mm.mysql.Driver");
Hvad med String SourceURL

Er sq lige lidt forviret med hensyn til det. Disky kan du skære det lidt ud i pap, såen fra begyndelsen. Måske starte med driveren...
Avatar billede disky Nybegynder
07. februar 2002 - 15:09 #4
Din mmsql .jar fil skal ligge i et sted i din classpath, hvor bestemmer du helt selv bare den er specifikt nævnt i classpath.

Du angiver classpath i dine system opsætning.

Du kan også udpakke .jar filen samme sted som resten af dine filer, så finder java selv ud af det.

Du kalder

open()

f.eks. med:

open("org.gjt.mm.mysql.Driver","jdbc:mysql://localhost/BASENAVN","BRUGERNAVN,"PASSWORD");

Det med uppercase skal udskiftes
Avatar billede ascii Nybegynder
07. februar 2002 - 15:23 #5
Det er under miljøvariabler (dansk.) laver en ny.  Kalder den JAVA_HOME.
Ligger mm.mysql-2.0.11 i en mappe på C drev "MySQLDriver" Skal jeg så give den værdien C:\MySQLDriver???
Avatar billede ascii Nybegynder
07. februar 2002 - 16:18 #6
Nu ser min kode ud spm følgende:

package test1;

import java.sql.*;
import cs1.*;

public class test1 {

  public static void main(String[] args) {

    // Load the driver
    try {

      // Load the driver class
      Class.forName("org.gjt.mm.mysql.Driver");
    System.out.println("Rigtig driver");
      // Define the data source for the driver
      String sourceURL = "jdbc:mysql://MADTHOM/mysql.db";

      // Create a connection through the DriverManager
      Connection databaseConnection =
        DriverManager.getConnection(sourceURL);

      // We made it!
      System.out.println("Connection established successfully!");

      // close connection
    databaseConnection.close();
    }
      catch (ClassNotFoundException cnfe) {
      System.err.println(cnfe);
  Keyboard.readChar();
    }
    catch (SQLException sqle) {
      System.err.println(sqle);
  Keyboard.readChar();
    }
    finally
    {
    System.out.println("Driver er forkert");
  Keyboard.readChar();
    }
  }
}

Den giver følgende fejl: java.sql.SQLExcption: Generel error:  Incorrect databasename'mysql.db'

Source er sat til det dir hvor databasen ligger C:\mysql\data  Er det rigtigt.
LocalHostname er MADTHOM. Der er godt nok username og password på, men hvordan får jeg det flettet ind
Avatar billede ascii Nybegynder
07. februar 2002 - 20:02 #7
Den skriver Rigtig driver ud, så jeg formoder at den er ok nu.
Men hvordan får jeg username og password med ind i billedet
Det er vel ikke nok bare at lave
String user, pass; i toppen
Bøvler også lidt med hvor Source og output skal være
Avatar billede ascii Nybegynder
07. februar 2002 - 20:04 #8
Det er sq da utroligt ;-))
Avatar billede kama Nybegynder
07. februar 2002 - 22:09 #9
Jeg tror bestemt ikke, at det er ok nu. Prøv at lave et statement og send noget SQL afsted....

1) Få styr på din MySQL-server. Du skal ikke fokusere på data-filerne!
Din server kører formentig som localhost på port 3306. Brugernavn og password svarer til det angivne for en bruger i MySQL. Under Windows kan du se alle disse informationer i det medfølgede MySQL-Admin.

2) Det nemmeste i dit tilfælde er, at placere mm.mysql-2.0.11 i eksempelvis C:\j2sdk1.3\jre\lib\ext - altså %JAVA_HOME%\jre\lib\ext. Så behøver du ikke at foretage dig mere i fobindelse med driveren. En anden mulighed er, at placere den et vilkårligt sted og derefter angive stien i CLASSPATH. NB: JAVA_HOME skal altså indeholde stien til din j2sdk-installation (%JAVA_HOME%).
3) Brug diskys klasse til at teste. Hvis den virker, så kører det!

"Source" kunne være: "jdbc:mysql://localhost/kundeDB?user=root&password=root".
"Output" ?????
Avatar billede kama Nybegynder
07. februar 2002 - 22:12 #10
Prøv at oprette en database med navnet kundeDB. Lav en tabel med navnet kunde indeholdende attributten 'navn' og indsæt nogle tupler. Tilpas nedenstående og test det.

import java.sql.*;

public class TestMySQL
{
    public static void main(String[] args)
    {
        Connection con = null;
        try
        {
            Class.forName("org.gjt.mm.mysql.Driver").newInstance();
        }
        catch (Exception E)
        {
            System.err.println("Unable to load driver.");
            E.printStackTrace();
        }

        try
        {
            con = DriverManager.getConnection("jdbc:mysql://localhost/kundeDB?user=root&password=root");
        }
        catch (SQLException e)
        {
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState:    " + e.getSQLState());
            System.out.println("VendorError:  " + e.getErrorCode());
        }

        try
        {
            Statement stmt = con.createStatement();

            ResultSet rs = stmt.executeQuery("SELECT navn from kunde");

            while (rs.next())
            {
                System.out.println(rs.getString(1));
            }

            rs.close();
            stmt.close();
            con.close();
        }
        catch (SQLException e)
        {
            System.out.println("SQLException: " + e.getMessage());
            System.out.println("SQLState:    " + e.getSQLState());
            System.out.println("VendorError:  " + e.getErrorCode());
        }
    }
}
Avatar billede ascii Nybegynder
07. februar 2002 - 22:20 #11
Source + output er i forbindelse. Hvor den skal læse fra og hvor den skal ligge classfilerne
Avatar billede ascii Nybegynder
07. februar 2002 - 22:21 #12
i forbindelse med JBuilder
Avatar billede ascii Nybegynder
07. februar 2002 - 22:36 #13
I er sq for seje.. Nu virker det sq.. JUBI
Avatar billede ascii Nybegynder
07. februar 2002 - 22:36 #14
50-50
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