Avatar billede jespersahner Nybegynder
11. juni 2003 - 12:35 Der er 11 kommentarer og
1 løsning

JDBC - dynamisk anvendelse af JDBC-drivere

Jeg skal i gang med at lave en applikation, hvor jeg gerne vha. JDBC vil connect'e til forskellige databaser af forskellig type, f.eks. MySql, DB2, SAS etc.

Mit spm. i den forbindelse er, om jeg dynamisk kan lade mit program finde driveren, der passer til databasen?
Avatar billede arne_v Ekspert
11. juni 2003 - 12:37 #1
Det er meget almindeligt at lave en konfigurations-fil hvor man
kan angive både driver klasse og connection URL.

Og det er ikke noget problem at loade driveren dynamisk - det er jo
standard at bruge Class.forName til det.
Avatar billede arne_v Ekspert
11. juni 2003 - 12:42 #2
Altså f.eks.:

Properties props = new Propeties();
props.load(new FileInputStream(propfile));
String driver = props.getProperty("db.driver");
String url = props.getProperty("db.url");
Class.forName(driver);
Connection con = DriverManager.getConnection(url, un, pw);
Avatar billede jespersahner Nybegynder
11. juni 2003 - 13:11 #3
Jeg ved ikke, om jeg forstår dig. Jeg forestiller mig, at programmet egentlig blot kender URL'en og ikke direkte database-typen - og at programmet selv finder en egnet driver til netop den aktuelle databasetype.
Avatar billede arne_v Ekspert
11. juni 2003 - 13:24 #4
Det kan du også godt lave med lidt if substring equals.

Hvis URL starter med "jdbc:odbc:" så ...

Men er det smart ?

I så fald skal du rette i den kdoe hver gang du skal tilføje en ny database
type.

Hvis du også putter driver klassen i konfigurationen så skal du kun
rette i konfigurations-filen.
Avatar billede jespersahner Nybegynder
11. juni 2003 - 15:41 #5
Hvis jeg forstår dig ret, vil du lave en konfigurationsfil, hvor alle URL'er og de dertil knyttede drivere er beskrevet.

Men hvad så hvis brugeren måske dynamisk tilslutter nye eksterne netværksdrev, hvor der er placeret databaser, som umiddelbart er fremmede for applikationen (URL'en kendes ikke på forhånd). I den situation vil jeg gerne have, at applikationen så at sige selv genkender den pågældende database-type (hvis den er kendt) og selv anvender den relevante driver.

Jeg forestiller mig en slags "plug-and-play"-facilitet, hvor applikationen selv forsøger at genkende den pågældende database-type.
Avatar billede arne_v Ekspert
11. juni 2003 - 15:59 #6
Jeg er lidt lost.

Du taler om netværks-drev og altså må jeg formode at du snakker om
fil-databaser og ikke database-servere.

Fil-databaser er nok i 99% af tilfældene ODBC.

D.v.s. man kan godt gætte på driver.

Men hvad med URL ?

ODBC URL'er bruger DSN og man kan vel ikke udlede DSN af sti.

Umiddelbart vil jeg mene at der skal indtastet noget information
når der skal tilføjes en database.

Men det er muligt at jeg ikke har set lyset.
Avatar billede jespersahner Nybegynder
11. juni 2003 - 16:38 #7
Det er nok mig, der forklarer mig dårligt.

Mht. fil-databaser må fremgangsmåden vel være, at man ud fra det fysiske fil-navn vælger driveren; der kan vel ikke være andre muligheder.

For så vidt der er tale om database-servere, er ønsket fortsat automatisk at detektere database-typen og derefter anvende den relevante driver, altså en slags "plug-and-play"-funktionalitet. Jeg tror jeg forestiller mig, at databasen et eller andet sted har en identifikation, som man kan spørge på og derefter udlede, hvilken driver der skal benyttes (?)

Det er vel noget i den retning, der sker, når man f.eks. i Windows tilslutter en ny printer. Her finder Windows selv den nødvendige driver for printeren og etablerer forbindelsen.

Kan man helt simpelt løbe alle drivere igennem og se, hvilken der giver "bid"? Man får vel en exception, hvis driveren ikke duer til den pågældende database?
Avatar billede arne_v Ekspert
11. juni 2003 - 16:47 #8
Ved de fleste fil-databaser tror jeg faktisk at man skal have
filnavn for at detecte driver og DSN for at detecte URL.
DSN kan normalt ikke udledes af sti til fil.

De fleste database servere skal man typisk have IP navn og port
for at kunne connecte til.

Det er lidt sværere at browser sig til.

Men principielt kan du godt forsøge at connecte dig med diverse
drivere og du skal nok få en SQLException, hvis driver ikke passer.

Men alle de java baserede database tools jeg kender spørger
om driver og URL.
Avatar billede jespersahner Nybegynder
12. juni 2003 - 01:33 #9
Det lyder jo også helt fornuftigt, kan jeg godt se. Hvis man som bruger forsøger at connecte til en server for at få adgang til data, er man formentlig også godt klar over på forhånd, hvilken type data der er tale om.

Jeg er dog lidt usikker på, hvordan jeg skal bruge JDBC mod en fil-database og altså ikke en database-server. F.eks. i relation til SAS, som jeg ønsker at læse fra, foregår kommunikationen normalt via en SAS/Share-server, men egentlig bør jeg vel på tilsvarende måde direkte kunne læse et SAS-datasæt uden at have en server kørende? Har du nogen mening/erfaring med dette? (jeg kan godt oprette et nyt spm.)
Avatar billede arne_v Ekspert
12. juni 2003 - 07:21 #10
Desværre er mine SAS erfaringer fra før Java (midt i 80'erne til først i 90'erne).

Så jeg ved ikke hvad man kan og hvad manikke kan i forhold til JDBC adgang.
Avatar billede jespersahner Nybegynder
12. juni 2003 - 14:01 #11
Ok, jeg tænker nu mere generelt: Data kan stilles til rådighed dels gennem en server og dermed JDBC-adgang eller simpelthen via en fil (f.eks. et SAS-datasæt, en DB2-tabel, en Access-fil mv.).

Mit spm. går på, om man også kan bruge JDBC direkte mod en fil, eller JDBC kræver en server at kommunikere med i den anden ende?
Avatar billede arne_v Ekspert
12. juni 2003 - 14:57 #12
JDBC kan bruges til begge dele.

MS Access, DBase IV, Paradox etc. er:
  application--(JDBC)---driver----(disk IO)----fil

MS SQLServer, Oracle, DB2, MySQL etc. er:
  application--(JDBC)---driver----(net IO)----databass server----(disk IO)----fil
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