Inbäddade SQL (som i C eller COBOL) och SQLJ (en Java -förlängning) kräver förekommer eftersom de direkt inbäddar SQL -uttalanden * inom * värdspråkets källkod. JDBC, å andra sidan, behandlar SQL när data överfördes till en databas; Det är inte sammanvävt med själva Java -koden.
Här är varför en företräde behövs för de inbäddade tillvägagångssätten men inte för JDBC:
* Kodintegration och sammanställning: Inbäddade SQL- och SQLJ -uttalanden förstås inte av standard C-, COBOL- eller JAVA -kompilatorer. Förkompilerens jobb är att:
* analysera SQL: Den analyserar de inbäddade SQL -uttalandena, kontrollerar syntax och validerar databasinteraktioner.
* Generera värdspråkkod: Det översätter dessa SQL-uttalanden till samtal till en databasförarens API (eller motsvarande lågnivådatabasåtkomstmekanismer). Detta genererar värdspråkskod som interagerar med databasen, hantering av anslutning, frågeställning och resultathämtning.
* Kombinera med värdspråkkod: Förkompilatorn väver denna genererade kod tillbaka till värdprogrammets källkod, vilket skapar ett komplett program som är redo för standardkompilering.
* Datatyp Mapping: Förkompilern hanterar kartläggningen mellan värdspråkets datatyper och databasens datatyper. Detta är avgörande eftersom värdspråket och databasen kan använda olika representationer för siffror, strängar, datum etc.
* dynamisk SQL -hantering: Om den inbäddade SQL använder dynamisk SQL (SQL -satser byggda vid körning) måste företrädaren generera lämplig kod för att hantera konstruktion och exekvering av dessa dynamiskt genererade frågor.
JDBC:s olika tillvägagångssätt:
JDBC använder en helt annan arkitektur. SQL -uttalanden behandlas som strängar inom Java -koden. JDBC -drivrutinen hanterar översättningen och körningen av dessa strängar. Ingen förkunskap är nödvändig eftersom:
* Runtime Execution: SQL skickas till databasen *vid körning *. JDBC -drivrutinen tar hand om att analysera och utföra SQL -uttalanden.
* strängbaserad SQL: SQL passeras som en sträng; Java -kompilatorn behöver inte speciell kunskap om SQL -syntax.
* Föraransvaret: Föraren ansvarar för all kommunikation med databasen, inklusive typkartläggning och felhantering.
I huvudsak kräver inbäddad SQL och SQLJ förkompilatorer för att överbrygga klyftan mellan värdspråket och databasen vid kompileringstid, medan JDBC hanterar denna överbryggning vid körning med en förare. Detta gör JDBC mer flexibel och bärbar men potentiellt mindre effektiv i vissa fall än det tätt integrerade tillvägagångssättet för inbäddad SQL och SQLJ.