Avatar billede arvad Nybegynder
12. september 2001 - 09:30 Der er 13 kommentarer og
2 løsninger

Hvordan laver man en DB-connection fra en maskine til en anden PC?

Jeg skal have et java program til at køre på en maskine, men den database jeg skal hente og gemme data i befinder sig på en anden maskine. Hvordan laver man den connection???
Avatar billede disky Nybegynder
12. september 2001 - 09:32 #1
På samme måde som hvis db serveren var på samme maskine.
Bare angiv en anden url til database serveren i din connection String
Avatar billede arvad Nybegynder
12. september 2001 - 09:34 #2
har du et ex???
Avatar billede disky Nybegynder
12. september 2001 - 09:38 #3
Her er min database klasse:

Du kalder open() med følgende parametere:


\"org.gjt.mm.mysql.Driver\",\"jdbc:mysql://ServerNavn/Database\",\"UserName\",\"Password\"


Det er altså \'ServerNavn\' du skal ændre, og selvfølgelig og Database,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 logical Nybegynder
12. september 2001 - 09:45 #4
Det kommer an på hvilken form for database, du ønsker at anvende. Her er eksempelkode til at tilgå en database:

String initString = \"jdbc:oracle:thin@myhost:1521:ORCL\";
String driver = \"oracle.jdbc.driver.OracleDriver\";

try {
  Class.forName(driver);
  Connection con = DriverManager.getConnection(driver, \"user\", \"password\");
  Statment stmt = con.createStatement();
  ResultSet rs = stmt.executeQuery(\"Select * from emp\");
  while(rs.next()) {
    System.out.println(rs.getString(\"EMPID\") + \" - \" + rs.getString(\"ENAME\"));
}
rs.close(); stmt.close(); con.close();
} catch (Exception e) {...}

Ovenstående driver og url beskriver oracles opsætning (bemærk myhost kan være en remote host)

Hvis det f.eks. er mysql ser de to linier øverst således ud:

String initString = \"jdbc:mysql://myhost:3306/mysql\";
String driver = \"org.gjt.mm.mysql.Driver\";

Hvis det er ODBC (Som skal være registreret lokalt):

String initString = \"jdbc:odbc:myodbcsource\";
String driver=\"sun.jdbc.odbc.JdbcOdbcDriver\";

Hvis du præciserer noget nærmere, kan vi bedre give dig et eksempel.
Avatar billede disky Nybegynder
12. september 2001 - 09:49 #5
Forresten logical, har du prøvet Oracle\'s JBuilder ?
Avatar billede logical Nybegynder
12. september 2001 - 09:56 #6
disky>>Kun kort for et halvt års tid siden, hvorfor??
Avatar billede arvad Nybegynder
12. september 2001 - 09:59 #7
Alt sammen meget fint, men det er en access database...
Avatar billede arvad Nybegynder
12. september 2001 - 10:02 #8
men det er måske ODBC? skal man så registrere ens connection i windows ODBC-datakilder på windows kontrolpanel???
Og kan man det når databasen er på en anden maskine???
Eller skal man gøre det på den anden maskine?
Avatar billede logical Nybegynder
12. september 2001 - 10:13 #9
Hvis det er Access, så er det ODBC, MS har desværre ikke lavet native JDBC drivere til Access :-)

Du skal på den maskine, der laver forbindelsen (Der hvor koden kører) have en ODBC data kilde oprettet som system DSN (Via kontrolpanelet), og heri kan du oprette ODBC datakilder i forhold til hvad du selv har registreret.

Hvis det \"bare er normalt\", vil du skulle add\'e en System DSN, bruge en Access driver, og vælge en database, som så kan være på det lokale netværks via et netværksdrev. Det er det eneste der kan gøres her.

Det DataSourceName som du giver din datakilde, er det du bruger i din initString.
Avatar billede logical Nybegynder
12. september 2001 - 10:15 #10
Og det med registrerede odbc datakilder, antallet af mulige drivere i odbc afhænger af hvad man har installeret, og jeg ved ikke om access har nogle distribuerede drivere
Avatar billede disky Nybegynder
12. september 2001 - 10:23 #11
logical: jeg skal nemlig til at bruge det, men jeg kan ikke få det til at arbejde sammen med mysql, den bliver ved med at sige den ikke kan finde min mysql driver. Har du nogen erfaring med denne kombination ?
Avatar billede logical Nybegynder
12. september 2001 - 10:30 #12
Nej desværre, men jeg mener at huske at tro, at jeg ved, at man kan tilknytte en jar fil ekstra til miljøet, jeg kan bare ikke huske hvordan :-(
Prøv at lave koden om til:
new org.gjt.mm.mysql.Driver()

Og prøv indtil du kan compile, så burde det efterfølgende også kunne hentes med Class.forName()
Avatar billede disky Nybegynder
12. september 2001 - 10:31 #13
Det jeg tænker på er der hvor man skal oprette database connections
Avatar billede logical Nybegynder
12. september 2001 - 10:40 #14
Ligesom man kan i Forte? Prøv nødløsningen og læs i hjælpen eller manualen, desværre :-(
Avatar billede disky Nybegynder
12. september 2001 - 10:42 #15
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