Avatar billede bumle90 Nybegynder
24. november 2002 - 11:55 Der er 21 kommentarer og
1 løsning

Hvad er embedded SQL?

Hvad er det, hvordan virker det og hvad er fordele ulemper ved det?
Evt. nogle gode links hvor jeg kan læse om det.
Avatar billede arne_v Ekspert
24. november 2002 - 12:01 #1
Embedded SQL består i af man har kilde-tekst
med:

exec sql en-almindelig-SQL-sætning

Den kilde-tekst kører man gennem en pre-compiler
og så for man en "rigtig" kilde-tekst ud, som oversættes
nprmalt med en compiler.

Meget almindeligt med C, Cobol og Fortran.

Ikke helt almindeligt med Java.
Avatar billede arne_v Ekspert
24. november 2002 - 12:03 #2
Embedded SQL for Java er kendt som SQLJ eller JSQL.

Det understøttes af de store database leverandører, men
har aldrig rigtigt slået igennem.
Avatar billede bumle90 Nybegynder
24. november 2002 - 12:06 #3
Når man bruger embedded sql, bliver ens program så platformsuafhængigt?
Avatar billede bumle90 Nybegynder
24. november 2002 - 12:07 #4
Og hvad er helt præcist fordelene ved at bruge embedded sql?
Avatar billede bumle90 Nybegynder
24. november 2002 - 12:09 #5
arne, har du icq nr. som man kan kontakte dig på?
Jeg er ved at samle information til en eksamen, hvor jeg skal snakke om måder at forbinde til en database på nemlig...Det lyder som om du har ret meget tjek på hvordan det funger :)
Avatar billede arne_v Ekspert
24. november 2002 - 12:15 #6
Der er ingen problemer med at være hardware/operativ-system
uafhængig (Java !), problemet er om du er database
uafhængig.

Hvis man undlader at bruge database specific SQL
og de forskellige SQLJ pre-compilere er kompatible,
så vil din kilde-tekst ihvertdfald være database
uafhængig.

Men vil din genererede Java kode (og den deraf genererede
byte kode) være database uafhængig ?

Det ved jeg faktisk ikke - jeg har aldrig selv
brugt SQLJ. Interessant spørgsmål. Men det burde
fremgå af noget dokumentation.
Avatar billede arne_v Ekspert
24. november 2002 - 12:16 #7
Jeg har ikke noget ICQ nummer (jeg er nok for gammel
til ICQ !).

:-)
Avatar billede arne_v Ekspert
24. november 2002 - 12:19 #8
Fordel ved embedded SQL ?

I C/Cobol/Fortran på mainframe/VMS/Unix verdenen
er det:
  - den meste brugte måde at accesse databasen på
  - den mest standardiserede måde at accesse databasen på
  - sommetider eneste måde at accesse databasen

Embedded SQL har aldrig rigtight slet igennem på PC -
formentlig p.g.a. ODBC.

Og helelr aldrig på Java - formentlig p.g.a. JDBC
(og entitY EJB's og JDO oven på JDBC).
Avatar billede bumle90 Nybegynder
24. november 2002 - 12:22 #9
ok.
Men hvordan virker det så helt præcist.
Virker det sådan at du skriver nogle statiske sql-sætninger i toppen af din kode, som så bliver oversat til en specifik databases API-kald af en specifik præcompiler leveret af database-producenten?
Avatar billede bumle90 Nybegynder
24. november 2002 - 12:24 #10
Og når man bruger JSQL, hvordan oversætter den det så? Compiler den det på en måde så den gør brug af JDBC, eller finder den på en eller anden måde ud af at lave direkte API-kald til databasen?
For hvis den laver den embeddede sql om til at den gør brug af jdbc, så kan man jo sige at så er det vel bare ligesom at bruge jdbc, bare på en anden måde
Avatar billede arne_v Ekspert
24. november 2002 - 12:27 #11
De behøver ikke være statiske eller stå i toppen.

Et af trickene er, at hvis man i sin embedded SQL
skriver :foobar så bliver den erstattet med
C/Cobol/Fortran/Java variablen foobar. Så man kan
faktisk godt gøre det ret fleksibelt.

Til C/CoboL/Fortran så bliver der genereret database
specifik kode af pre-compileren som hganske rigtigt
leveres af database-leverandøren.

Men jeg ved ikke med Java. De burde generere JDBC kald.
Og JDBC kald bør i princippet være database uafhængige.

Men jeg ved ikke ret meget om SQLJ. Jeg svarede med
et antal links ovre i Oracle gruppen. Prøv og læse dem.
Måske afklarer det noget.

Eller så prøv og compile et lille test-program og
se hvad der kommer ud af det !
Avatar billede bumle90 Nybegynder
24. november 2002 - 12:34 #12
ok...ja, har godt set du har svaret på mit spørgsmål ovre i java-gruppen også :) (Ved godt det ikke er helt lovligt, men jeg er lidt i tidsnød hæhæ)
Skal nok linke over til det her spg. fra den anden kategori.

Kan man lave alle former for SQL-sætninger i embedded SQL ?
Altså både DDL og DML.
Hvis man også kan lave DML, hvor bliver resultaterne så gemt? SQLen bliver jo allerede udført af precompileren før selve koden, så variabler osv. findes vel ikke endnu....Eller hvordan virker det?
Avatar billede arne_v Ekspert
24. november 2002 - 12:45 #13
DLDL & DML - sådan noget tror jeg man skal checke
i en refernce manual.

Jeg vil forventem, at al DML og det meste DDL virker.

Nej - hverken pre-compiler eller compiler eksekverer
noget. Det sker først når du kører programmet.

De transformerer kun kommandoen.

Pre-compileren transformerer fra simple SQL sætning
til et eller flere kald med SQL sætninger (JDBC kald
med Java).

Compileren oversætter kaldet til noget binært, som
stadigvæk indeholder SQL sætninger.

Først på kørsels-tidspunktet sendes SQL sætningerne
til databasen og udføres.
Avatar billede bumle90 Nybegynder
24. november 2002 - 12:52 #14
Men skulle man have en bestemt precompiler for hver database?
Avatar billede arne_v Ekspert
24. november 2002 - 12:59 #15
Det skal man ihvertfald for C/Cobol/Fortran.

Og sandsyneligvis også for Java. Fordi de bruger et eller
andet database-specifikt.

Jeg har lige fundet yderligere et par links:
http://archive.devx.com/dbzone/articles/sqlj/sqlj01/sqlj112701p.asp
http://www.javaworld.com/javaworld/jw-05-1999/jw-05-sqlj.html
Avatar billede bumle90 Nybegynder
24. november 2002 - 13:01 #16
Og kan man godt opbygge dynamiske SQL-sætninger når man bruger embedded SQL. Altså lægge noget brugerinput i en SQL-sætning. Fx
SELECT * FROM table WHERE betingelse=brugerinput
?
Avatar billede arne_v Ekspert
24. november 2002 - 13:06 #17
Ja.

Prøv og læs de 2 artikler ovenfor for konkrete
eksempler.

Men kort sagt: hvis du sætter et kolon foran noget
i embedded SQL, så bliver det opfattet som en variabel.

D.v.s.:

int v = 237;
#sql { SELECT * FROM T WHERE F = :v }

må være måden at skrive det på.
Avatar billede bumle90 Nybegynder
24. november 2002 - 13:10 #18
Du skrev tidligere det her :
C/Cobol/Fortran på mainframe/VMS/Unix verdenen
er det:
  - den meste brugte måde at accesse databasen på
  - den mest standardiserede måde at accesse databasen på
  - sommetider eneste måde at accesse databasen

Hvorfor er det gældende? Er det fordi der ikke findes en standardiseret mådes som JDBC til cobol/fortran osv?
Hvad med ODBC? Kan man ikke gøre brug af ODBC fra de miljøer?
Avatar billede arne_v Ekspert
24. november 2002 - 13:17 #19
ODBC er nemt at bruge i C. Jeg vil tro det er lidt
vanskeligere at bruge ODBC fra Cobol og Fortran.

Men problemet med ODBC er normalt om det overhovedet
findes til platformen.

Du har altid ODBC til Windows. Men ODBC er ikke særligt
udbredt udenfor Windows (og muligvis Linux).

ODBC er også relativ ny. Der er masser af database kode
som er startet længe før ODBC kom til verden.

Derudover så er der faktisk også folk som synes
at embedded SQL er en meget god måde at gøre tingene
på.
Avatar billede bumle90 Nybegynder
24. november 2002 - 13:32 #20
Jeg siger mange tusind tak Arne_V. Du har virkelig værtet mig til stor hjælp og sparet mig for en masse tid. Hvis jeg har flere spørgsmål at stille dig, hvilken kategori skal jeg så oprette spørgsmålet i for nemmest at få fat i dig :)?
Avatar billede arne_v Ekspert
24. november 2002 - 13:47 #21
Nu stiller du vel ikke spørgsmål til mig, men til ekspertens
samlede panel. Der er mange andre dygtige folk herinde.

Jeg plejer at følge med i Java, C/C++, J2EE og Databaser.
Avatar billede bumle90 Nybegynder
24. november 2002 - 15:11 #22
Er det muligt istedet for at bruge embedded SQL, at kalde databasen direkte fra sit program, så man altså selv koder det som precompileren laver for en?
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