Avatar billede flodhesten Nybegynder
21. november 2008 - 18:53 Der er 13 kommentarer og
1 løsning

Oprette forbindelse og udskrive værdier til Access Database

Hej.

Er det på nogen måde muligt at oprette forbindelse til en MS Access Database med Java?

Hvordan skal det i praktisk foregå, og hvordan kan jeg udskrive de indeholdende recordset.

På forhånd tak.
Avatar billede arne_v Ekspert
21. november 2008 - 18:59 #1
JDBC-ODBC bridgen og ODBC.

Ikke super robust - brug det kun i singlethreaded context.
Avatar billede arne_v Ekspert
21. november 2008 - 19:00 #2
Med DSN:

import java.sql.*;

public class DsnLess {
  public static void main(String[] args) throws Exception {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      Connection con = DriverManager.getConnection("jdbc:odbc:TestMSAccess");
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT * FROM T1");
      while(rs.next()) {
        System.out.println(rs.getInt(1) + " " + rs.getString(2));
      }
  }
}

Uden DSN:

import java.sql.*;

public class DsnLess {
  public static void main(String[] args) throws Exception {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      Connection con = DriverManager.getConnection("jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb)};Dbq=D:\\Database\\MSAccess\\Test.mdb;Uid=Admin;Pwd=;");
      Statement stmt = con.createStatement();
      ResultSet rs = stmt.executeQuery("SELECT * FROM T1");
      while(rs.next()) {
        System.out.println(rs.getInt(1) + " " + rs.getString(2));
      }
  }
}
Avatar billede flodhesten Nybegynder
21. november 2008 - 19:36 #3
Super. Det virker.

Hvad så hvis man skal tilføje nye værdier i sin tabel? Hvad kan man så gøre?
Avatar billede flodhesten Nybegynder
21. november 2008 - 19:39 #4
Og iøvrigt, du siger det ikke er super robust. Jeg regner med at der skal være en stor mængde data. Vil det have nogen indflydelse på "behandlingstiden"? Og findes der eventuelt en hurtigere eller mere pålidelig løsning?
Avatar billede arne_v Ekspert
21. november 2008 - 19:43 #5
Du insaetter med en INSERT statement.

Statement isn = con.createStatement();
ins.executeUpdate("INSERT ...");
Avatar billede arne_v Ekspert
21. november 2008 - 19:47 #6
Access er ikke til meget store datamaengder generelt.

Og JDBC-ODBC bridgen duer ikke til multithreaded brug.

Der er masser af andre muligheder for database.

Vil du have en embedded eller en server som koerer i egen process ?

Et par oplagte var HSQLDB og Derby.

Den foerste bruges af OpenOffice. Den anden kommer standard med Java 1.6 !
Avatar billede flodhesten Nybegynder
21. november 2008 - 19:54 #7
Jeg regner med at databasen kommer over 100.000 recordset.

Jeg ønsker egentlig bare lidt ligesom access hvor databasen ligger i samme mappe som min java-fil. Jeg er ikke helt inde i hvordan det foregår, men du kan sikkert anbefale det bedst mulige.
Avatar billede flodhesten Nybegynder
21. november 2008 - 20:02 #8
Jeg har forsøgt at tilføje nogle værdier:

Connection con2 = DriverManager.getConnection("jdbc:odbc:;Driver={Microsoft Access Driver (*.mdb)};Dbq=C:\\Users\\Peter\\Desktop\\db.mdb;Uid=;Pwd=;");
Statement ins = con2.createStatement();
ins.executeUpdate("INSERT INTO tabel1 (Name) VALUES ('Knud')");

Det ser dog ikke ud til at virke. Gør jeg noget forkert?
Avatar billede arne_v Ekspert
21. november 2008 - 20:06 #9
Nej - det ser rigtigt ud.

Hvilken fejl faar du ?

PS: I modsaetning til den skod kode jeg postede saa skal du huske at close baade
ResultSet, Statement og Connection.
Avatar billede arne_v Ekspert
21. november 2008 - 20:07 #10
Hvis en raekke ikke er for lang og applikationen er singlethreaded, saa kan Acces
sagtens bruges til 100000 raekker.

Hvis du satser paa at altid at bruge Java 1.6 eller nyere saa var Java DB alias
Derby meget oplagt efter min mening.
Avatar billede flodhesten Nybegynder
21. november 2008 - 20:14 #11
Problemet er, at den ikke giver nogen fejl. Den opdaterer dog ikke databasen. Det virker lidt mystisk.

Jeg tror jeg kigger lidt på det med de andre databaser lidt senere. I første omgang prøver jeg kræfter med Access.
Avatar billede flodhesten Nybegynder
21. november 2008 - 20:17 #12
Nu har jeg fået det til at virke.

Jeg tilføjede     

ins.close();
con2.close();

Tror måske det var det der gjorde udslaget.
Avatar billede flodhesten Nybegynder
21. november 2008 - 20:30 #13
Ind til videre synes jeg du skal poste et svar.

Så vil jeg læse lidt om de to databasetyper du anbefalte. Så kan jeg oprette en ny tråd og tage fat i emnet.

Tak for hjælpen.
Avatar billede arne_v Ekspert
21. november 2008 - 20:54 #14
OK
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