ODBC är ett gammalt och beprövat sätt att arbeta med databaser
inifrån ett program.
Wikipedia skriver (19 mars 2021):
ODBC remains in wide use today, with drivers available for most
platforms and most databases. It is not uncommon to find ODBC drivers
for database engines that are meant to be embedded, like SQLite, as a
way to allow existing tools to act as front-ends to these engines for
testing and debugging.
However, the rise of thin client computing using HTML as an
intermediate format has reduced the need for ODBC. Many web
development platforms contain direct links to target databases - MySQL
being very common. In these scenarios, there is no direct client-side
access nor multiple client software systems to support; everything
goes through the programmer-supplied HTML application. The
virtualization that ODBC offers is no longer a strong requirement, and
development of ODBC is no longer as active as it once was.
But when ODBC is no longer a strong requirement for
client-server programming, now is ODBC more important for data access
and data virtualization of data integration in data analytic and data
science scenarios. These new requirements are reflected in new ODBC
4.0 features such as semi-structured and hierarchical data, web
authentication and performance improvement.
Mål
-
Att förstå principerna för hur SQL kan användas inuti ett program,
främst via gränssnitt med funktionsanrop.
-
Att förstå principerna för ODBC, bland annat datakällor och drivrutiner.
-
Att få erfarenhet av praktisk ODBC-programmering.
Scenario
Vi ska skriva ett ODBC-program för att studera och uppdatera demo-databasen från
kursen Databasteknik.
Den databasen användes i några av övningarna och inlämningsuppgifterna i den kursen.
Förberedelser
-
Läs lämpligt kursmaterial med mera.
-
Om du arbetar hemma, behöver du installera databashanteraren Mimer.
Det behövs även om du inte ska köra någon databasserver lokalt,
utan bara klientprogram.
-
Lästips om Mimer från kursen Databasteknik:
Visual Studio 2019
Skapa först ett projekt i Visual Studio i form av ett tomt projekt med C++.
Jag har inte skrivit detaljerade instruktioner för hur man gör det,
men det är ganska likt hur det fungerar i Visual Studio 2015,
så man kan titta på
instruktionerna för det.
Projektet och ODBC-drivrutinen måste ha samma arkitektur.
Du har nästan säkert en 64-bitarsversion av Mimer på datorn, så ändra
projektet från x86 till x64
(finns i en ruta upptill i Visual Studio-fönstret).
ODBC i Windows idag använder "breda strängar" eller "wide strings",
som är strängar som består av "breda tecken",
dvs tecken som lagras med mer än åtta bitar per tecken.
Högerklicka därför på projektnamnet i Solution Explorer
i Visual Studio,
välj Properties,
sen Configuration Properties i menyn,
Advanced,
och till sist ändra Character Set till Use Multi-Byte Character Set
Det är tillåtet att använda andra kompilatorer och programmeringsomgivningar
än Visual Studio 2019,
till exempel GCC på Linux,
men det var Microsoft som hittade på ODBC,
och ODBC brukar vara enklast på Windows.
Visual Studio 2015
Här
kan man läsa mera om hur man använder (och även laddar hem och installerar)
Visual Studio 2015.
Följ instruktionerna där om hur man
skapar ett enkelt C-program.
Projektet och ODBC-drivrutinen måste ha samma arkitektur.
Jag hade installerat 64-bitars-Mimer på datorn, så jag ändrade
projektet från x86 till x64 (finns i en ruta upptill i Visual
Studio-fönstret).
ODBC i Windows idag använder "breda strängar" eller "wide strings",
som är strängar som består av "breda tecken",
dvs tecken som lagras med mer än åtta bitar per tecken.
Högerklicka därför på projektnamnet i Solution Explorer
i Visual Studio,
välj Properties,
sen Configuration Properties i menyn,
General,
och till sist ändra Character Set till Use Multi-Byte Character Set
Visual Studio 2017
Har jag inte provkört.
Linux och Mac
Efter att ha installerat Mimer på en Linux-maskin har jag kunnat kompilera
ODBC-program med det här kommandot:
gcc -Wall -std=c99 -g odbcprogrammet.c -I/home/mimer-installation/installation/mimersql1104-11.0.4B/include/unixodbc /home/mimer-installation/installation/mimersql1104-11.0.4B/lib/libmimodbc.so -o odbcprogrammet
Jag har inte provkört på Mac, men eftersom både Linux och Mac är Unix-liknade system,
kan det fungera med något liknande.
Uppgifter
-
Kom ihåg:
För att kunna koppla upp sig mot en databas (som demobasen)
med till exempel Mimer-klientprogrammet Batch SQL
måste man först lägga in den i Mimer Administrator,
Se
Getting started with Mimer
-
Kontrollera med Batch SQL att det fungerar att koppla upp sig mot Mimer-databasservern
och att logga in med det användarnamn och det lösenord som används i ODBC-programexemplen.
(Servern heter basen.oru.se, databasen heter demobasen,
användarnamnet är demouser och lösenordet är fnord.)
-
Det är inte ett krav att använda universitetets databasserver basen.oru.se.
Om man använder sin egen dator går det bra att skapa en lokal databas på sin egen dator,
och använda den i stället.
-
För att kunna koppla upp sig med ODBC mot en databas (som till exempel demobasen)
måste man ha en datakälla ("data source" på engelska).
På Windows skapar man dem i Mimer Administrator.
Som default är Create System Data Source ikryssat när man skapar databasen.
Man kan se datakällorna under fliken System DSN i Mimer Administrator.
Alternativt kan man skapa datakällor som bara gäller för en själv och inte för alla användare på datorn,
och de finns under fliken User DSN.
-
Studera och provkör ett eller flera av de ODBC-program som finns att ladda ner från
Databasteknik-bokens webbplats.
En rättelse till de exempelprogrammen, i väntan på att de blir uppdaterade:
I en del av programmen finns variabler som anger längder på textfält och storlekar på variabler.
De heter sådant som
number_size, name_size, wanted_number_size och wanted_name_size.
De har datatypen SQLINTEGER, vilket är fel. Egentligen ska de ha datatypen SQLLEN.
När vi använde 32-bitarssystem var datatyperna SQLINTEGER och SQLLEN båda 32-bitarstal,
så det fungerade att blanda dem.
Numera, med 64-bitarssystem, är SQLLEN ett 64-bitarstal.
Därför måste man ändra datatypen på dessa variabler från SQLINTEGER till SQLLEN.
Det gäller bara de variabler som anger variabelstorlekar och fältlängder,
inte vanliga heltalsvariabler som till exempel används för att lagra numret på en person som man hämtar ur databasen!
|
-
Varje student får ett användarnamn och ett lösenord till en databas
som ODBC-programmmet som ska skrivas i uppgiften ska jobba med.
Servern heter basen.oru.se och databasen heter dbk.
(Alternativt kan man skapa en lokal databas på sin egen dator,
och använda den i stället.)
Kontrollera att det fungerar att koppla upp sig mot Mimer-databasservern
och att logga in med ditt användarnamn och lösenord.
Prova dels med Batch SQL, och dels med ett mycket enkelt ODBC-program.
-
Skapa tabeller och lägg in data för demo-databasen,
enligt de instruktioner som finns i
övningsuppgift 3 i kursen Databasteknik.
-
Skriv ett ODBC-program i C
som ansluter till demo-databasen,
och kan:
- visa information om en anställd (ur tabellen employee) med ett namn som användaren anger
- visa information om en anställd med ett nummer som användaren anger
- lägga till en ny anställd
- ta bort en anställd
- ändra lönen för en anställd
Eventuella fel som uppstår i programmet ska hanteras på lämpligt sätt.
Tänk på referensintegriteten, till exempel om
man tar bort en anställd som någon annan har som chef,
eller om man lägger till en anställd och som hennes chef skriver in ett nummer på en anställd som inte finns.
Tips
-
Det är förmodligen bäst att arbeta i C (och inte C++)
och att använda ett enkelt textbaserat användargränssnitt.
-
Återanvänd inte statement handles för flera frågor,
utan avallokera det gamla och allokera ett nytt.
-
Microsoft har en del material:
- Det finns ett
projekt
som man kan ladda ner och provköra i Visual Studio.
-
Om ODBC
-
ODBC Programmer's Reference
Redovisning
Visa programmet för läraren, demonstrera hur det fungerar, och diskutera,
eller,
skicka
e-post
med fullständiga och tydliga beskrivningar av hur programmet fungerar och är uppbyggt.
Skicka med väl valda och väl kommenterade testkörningar, med in- och utdata.
Skicka också med källkoden, med förklaringar.
Om man arbetat i en miljö som Visual Studio eller Eclipse bör man packa ihop hela projektkatalogen
som en Zip-fil och skicka den som en bilaga.
(Även rar- och tar-filer fungerar.)
Men döp först om Zip-filen från nånting.zip till exempelvis nånting.info för att överlista överambitiösa virusfilter.
Arbeta i grupper om en eller två studenter.
I undantagsfall kan man arbeta i grupper om tre, men fråga läraren först.
Det är tillåtet att samarbeta i större grupper än så,
men varje grupp om 1-3 studenter måste fortfarande redovisa separat,
och det måste också tydligt framgå (i rapporten eller på annat sätt)
vilka som deltog i samarbetet.
Thomas Padron-McCarthy
(thomas.padron-mccarthy@oru.se),
19 mars 2021