Avatar billede webster Nybegynder
17. september 2001 - 23:44 Der er 8 kommentarer og
1 løsning

MySql tilgang

Hejsa

Jeg vil til at lege lidt med at tilgå en mysql server fra java. Jeg har både læst en del af suns tutorials om emnet, og de tidliggere spørgsmål her på eksperten. Det har givet mig et par spørgsmål jeg gerne vil havde svar på:

- I flere dokumenter bliver der talt om en ODBC bridge. Jeg har ikke bevist installeret sådan en, men alligvel virker mine forsøg fint. Er det noget der skal bruges, eller kan bruges?

- Jeg har downloadet og eksperimenteret med gjt.mm mysql driveren. I alt har jeg set nævnt 3 drivere. Hvad er forskellen på disse drivere/hvilke kan anbefales?

- Jeg har læst nogle dokumenter hvor RMI bliver brugt i forbindelse med database tilgangen, men har ikke helt forstået fidusen i det. Nogen der kan give et bud på hvad det kan være?
Avatar billede sunlock.dk Nybegynder
18. september 2001 - 07:20 #1
Avatar billede logical Nybegynder
18. september 2001 - 08:29 #2
Det er Sun selv, som har lavet jdbc-odbc bridge driver. Den er faktisk lavet for at have en større række databaser indledningsvis man kunne bevise jdbc på. Driveren ligger med i standard klassebiblioteket.

Hvis du ser mere end en driver til mysql, så skyldes det at det er open-source community. Alle kan/må skrive en jdbc driver til mysql, så et par stykker har prøvet. Det skal nok passe at der er ihvertfald 3, men den du anvender er (vist nok, p.t.) den mest stabile af dem.

Nu siger du i forbindelse med database tilgangen, men deri kan man inkludere en hel applikation, der anvender en database, så lad mig kommentere i stedet:
RMI er en udemærket distribueret protokol, som sikrer en nem, sikker? og objektorienteret tilgang til en serverfunktionalitet.
I et typisk client-server miljø vil en applikation kunne afvikles på en klient-maskine mens en række opdateringer og forespørgsler vil foregå på en central server. I dette rum spiller RMI netop voldsomt ind på linie med ren TCP ,CORBA og nu også webservices. RMI kan således være nødvendig for at opnå en two-tiers client/server løsning, men har intet med databasetilgangen at gøre. Det er en nødvendighed i applikationen, der afgør det.
Fra java kan man connecte til databaser på andre maskiner, hvis de tilbyder en distribueret jdbc driver. Det gør bla den du har, Oracle har flere versioner etc. Det giver mulighed for at en server kan connecte til en databaseserver via jdbc (og derved opnå 3-tier). Det kan man så vidt jeg ved f.eks. ikke med Access. Den kræver at javakoden og den selv er på samme maskine:-(
Oracle har to forskellige drivere, en thin og en fat. den tynde er en ren java løsning, mens den tykke bruger oracle-net til kommunikation. Java versionen er ren oracle/tcp (port 1521) kommunikation, men her kunne der sagtens være plads til at dyrke RMI (Det skulle så bare være oracle, der laver dist. RMI obj i databasen).

Så... anvendelse af RMI hænger ikke sammen med databasetilgang direkte. Det er en ren distribueret kommunikationsprotokol.
Avatar billede disky Nybegynder
18. september 2001 - 08:33 #3
Her er et eksempel som virker:

Kald open med: (ret selv data)

open(\"org.gjt.mm.mysql.Driver\",\"jdbc:mysql://ServerName/DatabaseName\",\"UserName\",\"PassWord\");


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;
    }
}
Avatar billede disky Nybegynder
18. september 2001 - 08:34 #4
Eksemplet connecter til en MySQL database igennem en JDBC driver, så du slipper helt for at bruge en ODBC bridge (gudskelov).
Avatar billede logical Nybegynder
18. september 2001 - 08:36 #5
disky>> Prøv at læse spørgsmålet :-) Jeg tror godt han kan skrive koden :-)
Avatar billede sunlock.dk Nybegynder
18. september 2001 - 08:37 #6
logical <<<

Hvad får dig til at tro det???:
\"...men alligvel virker mine forsøg fint....\" *S*

::sunlock.dk::
Avatar billede logical Nybegynder
18. september 2001 - 08:40 #7
>> Webster stiller tillægsspørgsmål til jdbc og har læst de øvrige spm (Endelig nogen, som gør det :-)

Og ja, den linie siger ligesom alt.
Avatar billede disky Nybegynder
18. september 2001 - 08:47 #8
Ja men han snakker om en unødvendig ODBC, derfor giver jeg et eksempel på det uden den irriterende odbc, om han bruger det er egentligt ikke mit problem.

Hvis hans problem udelukkende er RMI, så er overskriften temmelig forkert.

webster:

1. Nej du skal ikke bruge ODBC.
2. Forskellen er forskellige versioner, bare brug den nyeste den virker fint.
Avatar billede webster Nybegynder
18. september 2001 - 17:11 #9
mit problem var primært hvilken database driver der er best at bruge, og om ODBC bridgen er nødvendig.

Tak for hjælpen
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