06. juni 2004 - 10:20Der 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");
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.
Har du registrered din acces db i odbcad med navnet "Testdatabase" ?
Synes godt om
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.
Så du må hellere dobbelt checke. Er det stavet korrekt ? Brug for en sikkerheds skyld System DSN. Virker DSN fra et andet program ?
Synes godt om
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");
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(); } }
Synes godt om
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.
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);
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.