Avatar billede Slettet bruger
06. juni 2004 - 10:20 Der er 9 kommentarer og
1 løsning

Connection via JDBC.ODBC

Hej,

Jeg har et problem med en connection som jeg håber nogen kan hjælpe med.
Jeg har tidligere benyttet Interbase/Interclient, men skal nu til at bruge Access via et ODBC-link i windows.

Jeg har oprettet (både et system dns og et bruger dsn, ikke på samme tid men for at se om det var her fejlen lå) og refererer så til min database-dns fra min kode på følgende måde:

// *******************************************************
  // Skrivning til databasen - parametre er parset via actionListener-metoden
  // *******************************************************
  public void opretPerson(String strpersonId, String strfornavn, String strtelefon)
  {
    try
    {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      Connection conn = DriverManager.getConnection("jdbc:odbc:Testdatabase");

      Statement stmt = conn.createStatement();
      String sql = "INSERT INTO Personer(PersonId, Fornavn, Telefon) VALUES('" +strPersonId + "' + '" + strFornavn + "', '" + strTelefon + "')";
      stmt.executeUpdate(sql);

      System.out.println("Person er oprettet!");
    }
    catch(Exception e)
    {
      System.out.println("Der kunne ikke oprettes forbindelse til databasen!");
    }
  }

"Testdatabase" er altså navnet på mit ODBC-link i windows datakilder.

Er der noget jeg har overset?
Jeg har forsøgt at hente og installere diverse jdbc.odbc bridges, men har så fået at vide at denne funktionalitet allerede skulle ligge i den java runtime jeg har installeret.
Avatar billede arne_v Ekspert
06. juni 2004 - 10:23 #1
Det er korrekt at Java Runtime indeholder en JDBC ODBC bridge.

Hvilken fejl får du ?

Prøv evt. at erstatte:

catch(Exception e)
    {
      System.out.println("Der kunne ikke oprettes forbindelse til databasen!");
    }

med:

catch(Exception e)
    {
      System.out.println("Der kunne ikke oprettes forbindelse til databasen: " + e);
    }
Avatar billede jakoba Nybegynder
06. juni 2004 - 10:26 #2
Har du registrered din acces db i odbcad med navnet "Testdatabase" ?
Avatar billede Slettet bruger
06. juni 2004 - 10:31 #3
Hej,

Ja den er registreret under administration/datakilder (ODBC) med navnet testdatabase.

Jeg får nu fejlen:

Der kunne ikke oprettes forbindelse til databasen:java.sql.SQLException: [Microsoft][ODBC Driver Manager] Datakildenavnet blev ikke fundet, og der er ikke angivet en standarddriver.

Når jeg benytter e til at kaste min exception.
Avatar billede arne_v Ekspert
06. juni 2004 - 10:35 #4
Fejlmeddelelsen betyder: jeg kan ikke finde en DSN ved navn Testdatabase
Avatar billede arne_v Ekspert
06. juni 2004 - 10:37 #5
Så du må hellere dobbelt checke. Er det stavet korrekt ? Brug for en sikkerheds skyld
System DSN. Virker DSN fra et andet program ?
Avatar billede Slettet bruger
06. juni 2004 - 10:41 #6
Nu blir det underligt.
Jeg har nu ændret mit ODBC-navn til "Personer", hvilket ikke har haft nogen indflydelse på problemet i den metode jeg har skrevet ovenfor, men hvis jeg nu kører en anden klasse, hvor der trækkes ud fra databasen og indholdet skrives til konsollen virker det fint.

import java.sql.*;

// Klassedefinitionen
public class Database
{
  // Konstruktøren starter - her defineres en string til databasestien
  // og en try/catch blok til bestemmelse af evt. fejl ved connection til db.
  public Database()
  {
    try
    {
      Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      Connection conn = DriverManager.getConnection("jdbc:odbc:Personer");

      Statement stmt = conn.createStatement();
      String sql = "SELECT * FROM Personer";
      ResultSet rs = stmt.executeQuery(sql);

      while(rs.next())
      {
        String personId = rs.getString(1); // Integer i databasen
        String fornavn = rs.getString(2); // Varchar i databasen
        String telefon = rs.getString(3); // Char(8) i databasen

        System.out.println(personId);
        System.out.println(fornavn);
        System.out.println(telefon);
        System.out.println("-------------------");
      }

      rs.close();
      conn.close();
    }
    catch(Exception e)
    {
      System.out.println("Forbindelse til database kunne ikke etableres!");
    }
  }

  public static void main(String[] args)
  {
    Database db = new Database();
  }
}
Avatar billede Slettet bruger
06. juni 2004 - 10:53 #7
Hejsa,

Jeg har fundet fejlen selv.
Det viser sig at problemet var at der var plinger ("") omkring strPersonId i INSERT-sætningen, men da dette er et talfelt blev der altså lavet en fejl.

Det er nu rettet og det ser ud til at virke nu.

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
      Connection conn = DriverManager.getConnection("jdbc:odbc:Personer");

      Statement stmt = conn.createStatement();
      // Bemærk at strPersonId ikke har plinger omkring da dette er et talfelt i databasen
      String sql = "INSERT INTO Personer(PersonId, Fornavn, Telefon) VALUES(" +strPersonId + ", '" + strFornavn + "', '" + strTelefon + "')";
      stmt.executeUpdate(sql);

Takker for jeres hjælp!
Avatar billede arne_v Ekspert
06. juni 2004 - 12:09 #8
Hvis det var problemet har du vel også fået en anden fejl end den angivne ??
Avatar billede Slettet bruger
16. oktober 2007 - 16:45 #9
Smider du lige et svar på denne her arne v?
Pinligt at den har været åben så længe!
Avatar billede arne_v Ekspert
16. oktober 2007 - 16:54 #10
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