Avatar billede nird Nybegynder
27. februar 2002 - 17:55 Der er 8 kommentarer

Hvordan kobler man et java program sammen med en Acces-database?

.
Avatar billede disky Nybegynder
27. februar 2002 - 20:25 #1
Du bruger denne klasse:

og kalder den med:
open("sun.jdbc.odbc.JdbcOdbcDriver","jdbc:odbc:ODBCNAVN","USERNAME","PASSWORD");

Det med uppercase skal tilpasses dit system.



/*
* DataBase.java
*
* Created on 3. december 2000, 21:06
*/
import java.sql.*;

import disky.database.*;

/**
*
* @author  Søren Reinke
* @version
*/

/*
* Funder lidt over om database forbindelsen kun skal åbnes ved brug, eller x antal altid skal være åben
* og man så bruge den/de som connection pool
*/


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)
    {           
        try
        {
            if(con==null)
            {
                Class.forName(dbDriverName).newInstance();
                con = DriverManager.getConnection(dbClassName, user, pass);
            }
        }
        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 nird Nybegynder
27. februar 2002 - 21:08 #2
hvad er forName?
Avatar billede nird Nybegynder
27. februar 2002 - 21:23 #3
hvad er disky.databse.*?
Avatar billede disky Nybegynder
27. februar 2002 - 21:33 #4
forName er den metoder til at lave dynamisk class loading.

Fjern package linien (undskyld)
Avatar billede nird Nybegynder
28. februar 2002 - 01:39 #5
Kan jeg opdatere min database fra mit javaprogram?

Når jeg opretter min statement angiver jeg at man skal kunne scrolle og man skal kunne opdatere den på flg måde:

Statement stat=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

Men når jeg kører mit java program får jeg flg. fejlmeddelelse:
java.sql.SQLException: Result set type is TYPE_FORWARD_ONLY

Er det fordi at jeg bare ikke kan opdatere en Acces Database fra et javaprogram?
Avatar billede disky Nybegynder
28. februar 2002 - 07:35 #6
Nej det er fordi at access ikke tillader scrolling, eller at jdbc-odbc driveren ikke tillader det, eller odbc driveren ikke gør.

Man kan sagtens opdatere fra Java.
Avatar billede nird Nybegynder
28. februar 2002 - 13:04 #7
Jeg får faktisk allerede en exception når jeg opretter mit resultset:

java.sql.SQLException: [Microsoft][ODBC Microsoft Access Driver]Optional feature not implemented

Jeg opretter statement på flg måde:

Statement stat=con.createStatement(                   
  ResultSet.TYPE_SCROLL_INSENSITIVE,
  ResultSet.CONCUR_UPDATABLE);

Men hvis jeg skifter CONCUR_UPDATABLE med CONCUR_READ_ONLY kan jeg sagtens oprette mit resultset - men så kan jeg bare ikke opdatere det.

Kan jeg ændre noget i Acces eller i min driver?
Avatar billede nird Nybegynder
28. februar 2002 - 13:12 #8
Har tjekket min driver - der er IKKE noget flueben i "read only"
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