Avatar billede iceyblue Nybegynder
30. januar 2003 - 14:01 Der er 22 kommentarer og
1 løsning

Java connect til mysql database lokalt

Hej,
er der en der kan fortælle mig hvordan jeg connect'er til en lokal Mysql-database??

Jeg benytter Java, og har en Mysql database kørende på min win200 pc lokalt. Databasen hedder News_db. Denne kan jeg redigere i via phpmanager, så noget virker i hvert fald.

Men jeg vil gerne bruge java i stedet for php og så ved jeg ikke hvordan man gør :(

Skal man sætte noget ODBC op, eller må man gå ud fra at det er sat automatisk op??

Hvad skal man skrive i sin Javakode, man skal vel importere en sql-klasse osv.???

Håber på en lidt grundig forklaring, da jeg ikke er vildt god!! Jeg har et eksempel med en Oracle database i en bog, men det er vel anderledes med en Mysql.
Avatar billede arne_v Ekspert
30. januar 2003 - 14:06 #1
Du bruger JDBC.

Du downloader JDBC driver separat fra www.mysql.com og bruger
den til at connecte med.

JDBC er et standard API (meget ligesom ODBC).
Avatar billede bearhugx Nybegynder
30. januar 2003 - 14:08 #2
Avatar billede Slettet bruger
30. januar 2003 - 14:14 #3
her kan du downloade odbc driver til MySQL
http://www.mysql.com/downloads/api-myodbc.html
Avatar billede arne_v Ekspert
30. januar 2003 - 14:22 #4
Der er en intro, som ser OK ud på:
  http://www.kitebird.com/articles/jdbc.html
Avatar billede arne_v Ekspert
30. januar 2003 - 14:26 #5
Og jeg vil på det bestemteste fraråde at bruge JDBC-ODBC-bridge
og MySQL ODBC-driver, når der er en native JDBC driver !
Avatar billede arne_v Ekspert
30. januar 2003 - 14:28 #6
["native" = "pure Java"]
Avatar billede disky Nybegynder
30. januar 2003 - 14:35 #7
Download MySQL driveren som de andre siger, og brug så følgende klasser til at connecte med:

For resten af http://www.eksperten.dk/spm/121547

Her er eksemplet :)

Først klassen der kan connecte til databasen, den er generel og bliver kaldt fra fil #2

I bunden af fil #2, skal det skrevet med uppercase udskiftes med data som passer til dit system.



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;
    }
}





fil #2



/**
*
* @author  srr
* @version
*/
public class Database extends dbHandler
{
   
    /** Creates new Database */
    public Database()
    {
    }

    public boolean open()
    {
        return super.open(\"org.gjt.mm.mysql.Driver\",\"jdbc:mysql://DBSERVERNAME/DATABASENAME\",\"USERNAME\",\"PASSWORD\");
    }
Avatar billede iceyblue Nybegynder
30. januar 2003 - 16:12 #8
Okay...
Hvad er forskellen helt præcist mellem ODBC og JDBC???

JEg har downloaded et eller andet fra mysql.com, tror næsten det er JDBC'en, men hvordan installerer jeg den?? er det besværligt??

Takker for program-eksemplet!!
Avatar billede arne_v Ekspert
30. januar 2003 - 16:18 #9
ODBC er en standard for hvordan programmer skrevet i mange forskellige
sprog på en platform Windows kan snakke med stort set alle databaser.

JDBC er en standard hvordan programmer skrevet i et sprog Java på
mange forskellige platforme kan snakke med stort set alle database.
Avatar billede arne_v Ekspert
30. januar 2003 - 16:20 #10
Med hensyn til brug så udpakker du ZIP-file, så du har en fil
mysql-connector-java-2.0.14-bin.jar - den anbringer du i din classpath
når du kører programmet.
Avatar billede arne_v Ekspert
30. januar 2003 - 16:21 #11
java -classpath hvad-du-nu-ellers-måtte-have;mysql-connector-java-2.0.14-bin.jar din-main-class
Avatar billede arne_v Ekspert
30. januar 2003 - 16:23 #12
ODBC er en hel fin teknologi.

Hvis man koder i Visual C++, Delphi, C#, VB etc..

JDBC ODBC bridgen er ikke særlig god - derfor når man bruger
Java så vælger man en rigtigt JDBC driver, hvis der er en
tilgængelig - og det er der for stport set alle databaser undtagen
MS Access.
Avatar billede dsj Nybegynder
30. januar 2003 - 16:30 #13
mand hvor ku folk spare mange point, hvis de kiggede på dem der allerede var besvaret :)
Avatar billede iceyblue Nybegynder
30. januar 2003 - 18:49 #14
Ok...1000 tak for svar!!!

Jeg havde tænkt mig at lave en applet som tager kontakt til en database (mysql). Kan det overhovedet lade sig gøre, bare fordi udbyderen understøtter mysql???

Her er et eksempel fra en af de downloads Arne gav. Jeg har selv tilpasset den i en applet....den compiler fint, men jeg tror ikke det virker i forbindelse med den applet ser :( Gør jeg noget galt??? Hvordan laver man en normal system.out.print i en applet???


import java.awt.*;
import java.applet.Applet;
import java.awt.event.*;
import java.sql.*;

public class WebTest extends Applet implements ActionListener
{
    private Label test;
    private Label status;
    private TextField testField;
   
    public void connect()
    {
        Connection conn = null;
       
        try
        {
            String userName = "brugernavn";
            String password = "54764565";
            String url = "jdbc:mysql://localhost/News_db?user="+userName+ "&password=" + password;
            Class.forName("com.mysql.jdbc.Driver").newInstance();
            conn = DriverManager.getConnection (url);
           
            status.setText("Database connection established");
        }
        catch (Exception e)
        {
            System.out.println("Cannot connect to database server");
        }
        finally
        {
            if(conn != null)
            {
                try
                {
                    conn.close();
                    System.out.println("Database connection terminated");
                }
                catch (Exception e)
                {
                   
                }
            }
        }
    }

    public void init()
    {
               
        test    = new Label("Dette er bare en label");
        status    = new Label("jeg skal overskrives med DBinfo");
        testField = new TextField(5);
       
        add(test);
        add(status);
        add(testField);
       
        setSize(200,100);
        setBackground(Color.white);
       
        testField.addActionListener(this);
       
        connect();
       
    }
   
    // En enkelt test på et label
    public void actionPerformed(ActionEvent e)
    {
        String text = testField.getText();
        test.setText(text);
    }
}


dsj>>>> Jeg er den glade giver ;)
Avatar billede arne_v Ekspert
30. januar 2003 - 18:58 #15
En applet bør kunne snakke med en MySQL database, hvis:
  - den kører på samme server som appletten er hentet fra (applet security)
  - der er åbnet for adgang udefra (en typisk konfiguration vil nok
    kun tillade adgang til databasen fra server side scripts)
Avatar billede arne_v Ekspert
30. januar 2003 - 18:59 #16
String url = "jdbc:mysql://localhost/News_db?user="+userName+ "&password=" + password;

skal naturligvis tilrettet - localhost vil for en applet være den
PC den kører på.
Avatar billede disky Nybegynder
30. januar 2003 - 19:43 #17
Kun en internet udbyder der ser stort på sikkerhedne vil tillade database adgang udefra, så jeg tror ikke du skal satse på det.
Avatar billede iceyblue Nybegynder
30. januar 2003 - 23:22 #18
Hmmm....ok, det vil sige at java og databasetilgang ikke er nogle god ide?? Så ka' det være at jeg skal lave det i PHP i stedet for :(
Disky, siger nemlig noget der...det kan jeg godt se!!! Men hvorfor så den fine understøttelse af database i java??? Er det mere når man snakker java til rigtig applikation s-udvikling???
Avatar billede magoo20000 Nybegynder
31. januar 2003 - 22:56 #19
Man kunne jo også tænke sig en løsning med (J2ee) EJBs, Servlets og/eller JSP - der er der ingen problem med db'en på server-side.
Avatar billede arne_v Ekspert
01. februar 2003 - 00:01 #20
Hvis vi snakker internet adgang så er browser-JSP/servlet/EJB-database
gankse rigtigt det man bruger.

Men derudover er der jo også applikation-database med applikation
indenfor firewall på internt net.

JDBC bliver meget brugt i begge sammenhænge.
Avatar billede magoo20000 Nybegynder
01. februar 2003 - 10:23 #21
Jeg har bare haft mindre gode erfaringen med Applets/Db, så jeg foretrækker JSP/EJB/Servlet løsningen (evt. uden EJBs) med et MVC pattern. Applets kan da være ok, hvis man ikke har lyst/tid til at sætte sig ind i JSP
Avatar billede arne_v Ekspert
01. februar 2003 - 10:52 #22
magoo>

Jeg er da helt enig - jeg skrev altså "applikation" ikke "applet".

J2EE er den rigtige løsning, hvis der skal være adgang udefra.

Hvis det kun er adgang indefra kan en applikation også være en
mulighed.
Avatar billede magoo20000 Nybegynder
01. februar 2003 - 17:29 #23
Ok - we agree! .NET er i øvrigt, efter min mening, også at glimrende alternativ, men det hører vist til i en anden kategori!
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