Avatar billede krukken Mester
03. april 2004 - 18:53 Der er 47 kommentarer og
1 løsning

Forbind til JDBC og træk noget ud at MySQL-databasen

Hej,

Jeg har en Mysql database(c:\myql)

Hvordna forbinde jeg nu over JDBC. Jeg har lige hentet og udpakket Zip-filen.

Er der en som vil hjælp mig igennem indtil jeg har hentet data fra min database(localhost) ?
Avatar billede arne_v Ekspert
03. april 2004 - 18:55 #1
Super simpelt eksempel:

import java.sql.*;

public class MySQLTest {
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/Test", "", "");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM T1");
        while(rs.next()) {
            int f1 = rs.getInt(1);
            String f2 = rs.getString(2);
            System.out.println(f1 + " " + f2);
        }
    }
}
Avatar billede arne_v Ekspert
03. april 2004 - 18:55 #2
jar filen som var inde i zip filen skal i classpath når man kører
programmet (men ikke nødvendigt for at compile).
Avatar billede krukken Mester
03. april 2004 - 18:58 #3
Det er netop det med jar filen jeg ikke forstå!!
Skal den ligge i sammen bibliotek som mit program?
Avatar billede arne_v Ekspert
03. april 2004 - 19:00 #4
Nej - den skal være i classpath - den kan sagtens ligge der hvor den ligger
efter unzip.
Avatar billede arne_v Ekspert
03. april 2004 - 19:00 #5
Hvordan kører du dit program ?  Command line ? Fra IDE ? Servlet/JSP ?
Avatar billede krukken Mester
03. april 2004 - 19:01 #6
Hvordan sætter jeg så den classpath? Og hvad skal filen hedde? Den hedder mysql-connector-java-3.0.11-stable-bin ligenu.
Avatar billede krukken Mester
03. april 2004 - 19:01 #7
fra commando linien
Avatar billede arne_v Ekspert
03. april 2004 - 19:02 #8
Navnet er OK.
Avatar billede arne_v Ekspert
03. april 2004 - 19:03 #9
java -classpath .;C:\dir\mysql-connector-java-3.0.11-stable-bin.jar DitProgram
Avatar billede arne_v Ekspert
03. april 2004 - 19:03 #10
java -classpath .:/dir/mysql-connector-java-3.0.11-stable-bin.jar DitProgram

hvis på Linux
Avatar billede krukken Mester
03. april 2004 - 19:03 #11
import java.sql.*;

public class MySQLTest {
    public static void main(String[] args) throws Exception {
        Class.forName("com.mysql.jdbc.Driver");
        Connection con = DriverManager.getConnection("jdbc:mysql://localhost/Test", "", "");
        Statement stmt = con.createStatement();
        ResultSet rs = stmt.executeQuery("SELECT * FROM T1");
        while(rs.next()) {
            int f1 = rs.getInt(1);
            String f2 = rs.getString(2);
            System.out.println(f1 + " " + f2);
        }
    }


Test er det navnet på databasen som bruges i dette eksempel?
Avatar billede krukken Mester
03. april 2004 - 19:06 #12
Jeg sidder på en windowsmaskine
Avatar billede arne_v Ekspert
03. april 2004 - 19:06 #13
Jep.

database = Test
tabel = T1
felt F1 INTEGER
felt F2 VARCHAR(50)
Avatar billede krukken Mester
03. april 2004 - 19:08 #14
Skla mit program så ligge i roden af c: for at virke?

localhost/mitprogram??? (som der står i dit program)
Avatar billede krukken Mester
03. april 2004 - 19:10 #15
Dette er stien til den jarfil: C:\unzipped\mysql-connector-java-3.0.11-stable\mysql-connector-java-3.0.11-stable
Avatar billede arne_v Ekspert
03. april 2004 - 19:10 #16
Nej.

Du står bare i det dir hvor MySQLTest.java og MySQLTest.class ligger.
Avatar billede arne_v Ekspert
03. april 2004 - 19:10 #17
C:\prog>  java -classpath .;C:\dir\mysql-connector-java-3.0.11-stable-bin.jar MySQLTest
Avatar billede arne_v Ekspert
03. april 2004 - 19:11 #18
Hvis MYSQL kører på en anden maskine skal localhost naturligvis rettes til.

Hvis du har brugernavn/password på skal de to "" rettes.
Avatar billede krukken Mester
03. april 2004 - 19:15 #19
Her ligger mit program: D:\Skole\6. Semester\ONK1\Øvelser\server
programmet hedder: Database.java

Her ligger den jar-fil: C:\unzipped\mysql-connector-java-3.0.11-stable\mysql-connector-java-3.0.11-stable
Og den hedder: mysql-connector-java-3.0.11-stable-bin

Min database hedder: database_test
brugernavn er: bruger
password er: pwsword

Min mysqlserver ligger her: C:\mysql

Mit program ser sådan ud:
import java.sql.*;

public class Database {

    private Connection con;
    private Statement stmt;
    private ResultSet rs;

    static public void main(String[] args) {
        new Database();
    }

    public Database() {
        System.out.println("Checking MySQL access");
        try {
            Class.forName("Driver");
            DriverManager.setLoginTimeout(30);
            con = DriverManager.getConnection("jdbc:mysql://localhost/mysql/doc/database_test", "bruger", "passwrd");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        System.exit(0);
    }

}

Hvad skal jeg lave om???
Avatar billede krukken Mester
03. april 2004 - 19:16 #20
Passwordene er ens:-) Jeg lavede bare lige en lille tastefejl.
Avatar billede krukken Mester
03. april 2004 - 19:30 #21
Gider du at hjælpe mig - eller er du stået af?
Avatar billede arne_v Ekspert
03. april 2004 - 19:48 #22
Slet ikke, men jeg skulle have noget aftensmad !

:-)
Avatar billede arne_v Ekspert
03. april 2004 - 19:50 #23
D:
cd "\Skole\6. Semester\ONK1\Øvelser\server"
javac Database.java
java -classpath .;C:\unzipped\mysql-connector-java-3.0.11-stable\mysql-connector-java-3.0.11-stable\mysql-connector-java-3.0.11-stable-bin.jar Database
Avatar billede krukken Mester
03. april 2004 - 19:51 #24
Skal der ikke ændres noget i koden?
Avatar billede arne_v Ekspert
03. april 2004 - 19:51 #25
Den linie er vist lidt for lang.

java -classpath .;<fuld sti til jar filen> Database
Avatar billede arne_v Ekspert
03. april 2004 - 19:52 #26
Jo

con = DriverManager.getConnection("jdbc:mysql://localhost/database_test", "bruger", "passwrd");

MySQL holder selv styr på i hvilke directories filerne ligger
Avatar billede krukken Mester
03. april 2004 - 19:54 #27
Hvad så når jeg skal have det over på en anden computer - skal jeg så hente JDBC igen?
Avatar billede arne_v Ekspert
03. april 2004 - 19:55 #28
Så kan du f.eks. flytte jar filen sammen med dit program.
Avatar billede krukken Mester
03. april 2004 - 19:56 #29
kan man ikke gøre det på en måde så man compiler det hele med uden at skrive alt det der?

Altså så man kan nøjes med "javac Database.java" og "java Database"?
Avatar billede krukken Mester
03. april 2004 - 19:57 #30
Og hvor skal jeg ligger Jar-filen? Bare ved siden af mit program?(til spørgsmålet om når jeg flytter programmet til en anden computer)
Avatar billede arne_v Ekspert
03. april 2004 - 19:59 #31
Hvis jar file ligger i samme dir som du står I kan du nøjes med at bruge:

java -classpath .;mysql-connector-java-3.0.11-stable-bin.jar Database
Avatar billede krukken Mester
03. april 2004 - 20:01 #32
Når jeg kører: java -classpath .;C:\unzipped\mysql-connector-java-3.0.11-stable\mysql-connector-java-3.0.11-stable\mysql-connector-java-3.0.11-stable-bin.jar Database, får jeg en masse exceptions. Men det compiler fint!
Avatar billede arne_v Ekspert
03. april 2004 - 20:02 #33
Der findes forskellige muligheder.

Man kan ligge jar filen ind så alle Java programmer default kigger i den.

Det anbefaler jeg ikke.

Så kan du pakke din applikation ned i en executabel jar fil med et Class-Path
direktiv i manifest til MySQL jar filen.

Så kan du bare kopiere de 2 jar filer til en PC og brugeren kan dobbelt
klikke på din jar i windows explorer og programmet kører og finder
selv MySQL jar filen.
Avatar billede arne_v Ekspert
03. april 2004 - 20:02 #34
Hvilke exceptions ?
Avatar billede krukken Mester
03. april 2004 - 20:03 #35
D:\Skole\6. Semester\ONK1\Ovelser\server>java -classpath .;C:\unzipped\mysql-con
nector-java-3.0.11-stable\mysql-connector-java-3.0.11-stable\mysql-connector-jav
a-3.0.11-stable-bin.jar Database
Checking MySQL access
java.lang.ClassNotFoundException: Driver
        at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
        at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
        at java.lang.Class.forName0(Native Method)
        at java.lang.Class.forName(Class.java:130)
        at Database.<init>(Database.java:16)
        at Database.main(Database.java:10)

D:\Skole\6. Semester\ONK1\Ovelser\server>
Avatar billede arne_v Ekspert
03. april 2004 - 20:05 #36
Ret

Class.forName("Driver");

til

Class.forName("com.mysql.jdbc.Driver");
Avatar billede krukken Mester
03. april 2004 - 20:08 #37
Checking MySQL access
java.sql.SQLException: Invalid authorization specification,  message from server
: "Access denied for user: 'brian@localhost' (Using password: YES)"
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1905)
        at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:1831)
        at com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:896)
        at com.mysql.jdbc.Connection.createNewIO(Connection.java:1654)
        at com.mysql.jdbc.Connection.<init>(Connection.java:432)
        at com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java
:400)
        at java.sql.DriverManager.getConnection(DriverManager.java:512)
        at java.sql.DriverManager.getConnection(DriverManager.java:171)
        at Database.<init>(Database.java:18)
        at Database.main(Database.java:10)

D:\Skole\6. Semester\ONK1\Ovelser\server>
Avatar billede arne_v Ekspert
03. april 2004 - 20:11 #38
Fejlen er jo ret klar:

  Access denied for user: 'brian@localhost'

Det angivne brugernavn/password giver ikke adgang.
Avatar billede krukken Mester
03. april 2004 - 20:14 #39
Jeps - det var ikke password på;-) Det var mine adminpassword jeg troede man skulle bruge.

Hvordan sætter man password på? Jeg har det mysqladmin-interface - eller skal de gøre inde i selve mysqlserveren?
Avatar billede arne_v Ekspert
03. april 2004 - 20:17 #40
Avatar billede krukken Mester
03. april 2004 - 20:19 #41
Kan det ikke laves på en måde så man ikke behøver at skrive: java -classpath .;C:\unzipped\mysql-con
nector-java-3.0.11-stable\mysql-connector-java-3.0.11-stable\mysql-connector-jav
a-3.0.11-stable-bin.jar Database

Altså så den kode alt dette ligger implicit i koden?
Avatar billede arne_v Ekspert
03. april 2004 - 20:23 #42
Se min 20:02:05 kommentar
Avatar billede arne_v Ekspert
03. april 2004 - 20:25 #43
Avatar billede arne_v Ekspert
03. april 2004 - 20:27 #44
Og nu vil jeg ligge et svar
Avatar billede krukken Mester
03. april 2004 - 20:29 #45
Det er helt fint tak for hjælpen:-) Jeg har også fået forbindelse.
Avatar billede arne_v Ekspert
03. april 2004 - 20:31 #46
Arbejd lidt med JDBC.

Og når dit program skal distribueres så kig på jar, manifest og Class-Path direktiv.
Avatar billede krukken Mester
05. april 2004 - 10:49 #47
java -classpath .;JDBC.jar Database
Avatar billede arne_v Ekspert
05. april 2004 - 10:58 #48
Lidt kortere navn !?
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