Studio/ODBC Basics
Lab: ODBC: Basic ODBC Author: John D. Baker bakerjd@kos.net
What is ODBC?
ODBC (Open DataBase Connectivity) is a standard API for accessing relational data. ODBC is commonly used with SQL databases but is also used to access data in spreadsheets and other files.
An ODBC application has three basic parts.
One: a datasource - usually an SQL database.
Two: an ODBC driver that reads & writes the datasource.
Three: an application interface that calls the driver.
This lab shows how to use the basic facilities of the J ODBC interface. First load the basic interface script.
load 'dd'
Check DSN registrations?
NOTE: This lab uses the following ODBC datasources. If these datasoures are not registered use the ODBC control panel applet to register them.
DSN FILE, DIRECTORY or DATABASE
--------------------------------------------- jdata FoxPro
or dBase driver
jpath '~system\examples\data
jaccess ACCESS driver
jpath '~system\examples\data\jdata.mdb
NB. check registrations - will be list of 1's NB. if all DSN's are registered. (;:'jdata jaccess') e. {."1 ddsrc 0 1 1
Connection handles
The first step to using ODBC is to connect to a datasource. The verb (ddcon) connects datasources and returns an integer connection handle.
NB. connect the jdata source - assign connection handle ch ]ch =: ddcon 'dsn=jdata' 51975488 NB. If ch is _1 an error occurred - otherwise NB. there are no errors and the result of dderr is empty NB. If you get an error check your ODBC registrations. dderr ''
Listing tables and views in a datasource
After establishing a datasource connection you frequently want to find out what tables and views you can access.
NB. list tables, views and queries in connected datasource ddtblx ch ââââââââââââââââââââââââââââââââââ¬â¬ââââââ¬ââââââ¬â âC:\NSG\J601\SYSTEM\EXAMPLES\DATAââaddr âTABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATAââdept âTABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATAââemp âTABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATAââloc âTABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATAââtdataâTABLEââ ââââââââââââââââââââââââââââââââââŽâŽââââââŽââââââŽâ
Listing columns in tables
It is also useful to determine what columns are in particular tables.
NB. show the columns of tdata 'tdata' ddcol ch ââââââââââââââââââââââââââââââââââ¬ââââââââââââ¬âââââââââââ¬ââââââââââââ¬ââââââââââ¬ââââââââââ¬ââââââââââââ¬ââââââââââââââ¬âââââââââââââââ¬âââââââââââââââ¬âââââââââ¬ââââââââ¬âââââââââââ¬ââââââââââââââ¬âââââââââââââââââ¬ââââââââââââââââââ¬âââââââââââââââââ¬ââââââââââââ¬âââââ... âTABLE_CAT âTABLE_SCHEMâTABLE_NAMEâCOLUMN_NAMEâDATA_TYPEâTYPE_NAMEâCOLUMN_SIZEâBUFFER_LENGTHâDECIMAL_DIGITSâNUM_PREC_RADIXâNULLABLEâREMARKSâCOLUMN_DEFâSQL_DATA_TYPEâSQL_DATETIME_SUBâCHAR_OCTET_LENGTHâORDINAL_POSITIONâIS_NULLABLEâORDIN... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âtdata âNAME â12 âChar â14 â28 â â â1 â â â12 â â28 â1 âYES â1 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âtdata âSEX â12 âChar â1 â2 â â â1 â â â12 â â2 â2 âYES â2 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âtdata âDEPT â12 âChar â4 â8 â â â1 â â â12 â â8 â3 âYES â3 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âtdata âDOB â8 âNumeric â53 â8 â â2 â1 â â â8 â â â4 âYES â4 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âtdata âDOH â8 âNumeric â53 â8 â â2 â1 â â â8 â â â5 âYES â5 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âtdata âSALARY â8 âNumeric â53 â8 â â2 â1 â â â8 â â â6 âYES â6 ... ââââââââââââââââââââââââââââââââââŽââââââââââââŽâââââââââââŽââââââââââââŽââââââââââŽââââââââââŽââââââââââââŽââââââââââââââŽâââââââââââââââŽâââââââââââââââŽâââââââââŽââââââââŽâââââââââââŽââââââââââââââŽâââââââââââââââââŽââââââââââââââââââŽâââââââââââââââââŽââââââââââââŽâââââ... NB. show the columns of addr 'addr' ddcol ch ââââââââââââââââââââââââââââââââââ¬ââââââââââââ¬âââââââââââ¬ââââââââââââ¬ââââââââââ¬ââââââââââ¬ââââââââââââ¬ââââââââââââââ¬âââââââââââââââ¬âââââââââââââââ¬âââââââââ¬ââââââââ¬âââââââââââ¬ââââââââââââââ¬âââââââââââââââââ¬ââââââââââââââââââ¬âââââââââââââââââ¬ââââââââââââ¬âââââ... âTABLE_CAT âTABLE_SCHEMâTABLE_NAMEâCOLUMN_NAMEâDATA_TYPEâTYPE_NAMEâCOLUMN_SIZEâBUFFER_LENGTHâDECIMAL_DIGITSâNUM_PREC_RADIXâNULLABLEâREMARKSâCOLUMN_DEFâSQL_DATA_TYPEâSQL_DATETIME_SUBâCHAR_OCTET_LENGTHâORDINAL_POSITIONâIS_NULLABLEâORDIN... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âaddr âFIRST_NAME â12 âChar â8 â16 â â â1 â â â12 â â16 â1 âYES â1 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âaddr âLAST_NAME â12 âChar â10 â20 â â â1 â â â12 â â20 â2 âYES â2 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âaddr âEMP_ID â12 âChar â6 â12 â â â1 â â â12 â â12 â3 âYES â3 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âaddr âSTREET â12 âChar â20 â40 â â â1 â â â12 â â40 â4 âYES â4 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âaddr âCITY â12 âChar â10 â20 â â â1 â â â12 â â20 â5 âYES â5 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âaddr âSTATE â12 âChar â2 â4 â â â1 â â â12 â â4 â6 âYES â6 ... ââââââââââââââââââââââââââââââââââŒââââââââââââŒâââââââââââŒââââââââââââŒââââââââââŒââââââââââŒââââââââââââŒââââââââââââââŒâââââââââââââââŒâââââââââââââââŒâââââââââŒââââââââŒâââââââââââŒââââââââââââââŒâââââââââââââââââŒââââââââââââââââââŒâââââââââââââââââŒââââââââââââŒâââââ... âC:\NSG\J601\SYSTEM\EXAMPLES\DATAâ âaddr âZIP â8 âNumeric â53 â8 â â2 â1 â â â8 â â â7 âYES â7 ... ââââââââââââââââââââââââââââââââââŽââââââââââââŽâââââââââââŽââââââââââââŽââââââââââŽââââââââââŽââââââââââââŽââââââââââââââŽâââââââââââââââŽâââââââââââââââŽâââââââââŽââââââââŽâââââââââââŽââââââââââââââŽâââââââââââââââââŽââââââââââââââââââŽâââââââââââââââââŽââââââââââââŽâââââ...
Statement handles
It us handy to know how many rows are in a table. To do this submit an SQL query to the database using the (ddsel) verb. The result of (ddsel) is an integer called a statement handle.
NB. count the rows in tdata - assign statement handle sh sh =: 'select count(*) from tdata' ddsel ch
Fetching data
The statement handle is a reference to selected data. To access the data it must be fetched. The following fetch operation returns a single boxed row count number.
NB. fetch the data associated with statement handle sh ddfch sh ââââ â25â ââââ NB. close the statement handle ddend sh 0
Now select all the rows of tdata and fetch the first 10 rows.
NB. select all rows of tdata sh =: 'select * from tdata' ddsel ch NB. fetch first 10 rows - arg is stmt and rows ]dat =: ddfch sh,10 ââââââââââââââââ¬ââ¬âââââ¬ââââââââââ¬ââââââââââ¬ââââââ âMacdonald B âFâD101â1.95906e7â1.97805e7â32591â âGenereaux S âFâD103â1.94503e7â1.96602e7â95415â âKoebel R âMâD101â1.93711e7â1.98009e7â63374â âKeller J âFâD101â1.95105e7â1.97404e7â48898â âTwa L âFâD108â1.95507e7â1.98004e7â49075â âBlamire J âFâD101â1.96008e7â1.97912e7â46469â âGordon E âFâD103â1.95202e7â1.97908e7â29960â âDenny D âFâD101â1.94908e7â1.98004e7â46939â âNewton R âMâD108â1.95601e7â1.97902e7â73368â âMiller S âFâD103â1.96501e7â1.98303e7â43418â ââââââââââââââââŽââŽâââââŽââââââââââŽââââââââââŽââââââ
(dat) is a boxed list of tables.
$&.> dat âââââââ¬âââââ¬âââââ¬âââââ¬âââââ¬âââââ â10 14â10 1â10 4â10 1â10 1â10 1â âââââââŽâââââŽâââââŽâââââŽâââââŽâââââ
Fetching all table data.
A second argument of _1 means return all the rows. If some rows have already been fetched _1 means all the remaining rows.
NB. get the remaining rows - statement handle is closed NB. when all the rows are returned. ddfch sh,_1 ââââââââââââââââ¬ââ¬âââââ¬ââââââââââ¬ââââââââââ¬âââââââ âDingee S âMâD103â 1.9641e7â1.98309e7â 46877â âBugg P âFâD101â1.92011e7â1.95804e7â 47165â âLafrance R âFâD101â1.95202e7â1.98302e7â 47017â âRogerson G âMâD101â1.95712e7â1.98302e7â108777â âBrando D âFâD108â1.95904e7â1.97708e7â 44931â âAnctil J âMâD108â1.94606e7â1.97906e7â 60974â âBauerlein J âFâD103â1.96204e7â1.98409e7â 33668â âO'Keefe D âMâD101â1.93903e7â 1.9671e7â 66377â âBeale D âFâD103â1.95703e7â1.97404e7â 48023â âChesher D âFâD103â 1.9561e7â1.98408e7â 35184â âCahill G âMâD108â1.93205e7â 1.9671e7â 81358â âAbbott K âMâD103â 1.9631e7â1.98309e7â 50817â âMcKee M âFâD103â1.96004e7â1.98104e7â 43115â âLivingston P âFâD101â1.95809e7â1.98008e7â 50010â âHolliss D âFâD101â1.96005e7â1.97707e7â 46313â ââââââââââââââââŽââŽâââââŽââââââââââŽââââââââââŽâââââââ
Selecting and fetching a table subset
SQL is very useful for specifying subsets of tables
NB. compare male and female salaries sh =: 'select avg(salary) from tdata where sex = ''F''' ddsel ch female =: ,> ddfch sh,_1 sh =: 'select avg(salary) from tdata where sex = ''M''' ddsel ch male =: ,> ddfch sh,_1 male,female 68990.3 46364.2
Multiple datasources
More than one datasource can be connected.
ch2 =: ddcon 'dsn=jaccess' NB. list tables, views et cetera ddtblx ch2 ââââââââââââââââââââââââââââââââââââââââ¬â¬ââââââââââââââââââ¬âââââââââââââ¬â âC:\NSG\J601\SYSTEM\EXAMPLES\DATA\jdataââMSysACEs âSYSTEM TABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATA\jdataââMSysModules âSYSTEM TABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATA\jdataââMSysModules2 âSYSTEM TABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATA\jdataââMSysObjects âSYSTEM TABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATA\jdataââMSysQueries âSYSTEM TABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATA\jdataââMSysRelationshipsâSYSTEM TABLEââ âC:\NSG\J601\SYSTEM\EXAMPLES\DATA\jdataââtdata âTABLE ââ ââââââââââââââââââââââââââââââââââââââââŽâŽââââââââââââââââââŽâââââââââââââŽâ
Transactions and Modifying data
ODBC can also update and modify data. Before modifying the data of an important table it is often useful to start a transaction so the updates can be rolled back (cancelled) if necessary. Not all ODBC drivers support transactions. The Access driver is one that does.
NB. start a transaction ddtrn ch2 0 NB. add a row to tdata sql =: 'insert into tdata (name,sex,dept,dob,doh,salary) ' sql =: sql , ' values (''Mouse, Mickey'',''M'',''XDEP'',19320101,19990101,666666)' NB. insert row sql ddsql ch2 0 NB. number of rows affected ddcnt '' 1
Deleting data
Wait a minute this is not a Mickey Mouse operation let us do a little corporate downsizing and turf the rodent. This can be down with a delete command.
NB. delete a record 'delete from tdata where dept = ''XDEP''' ddsql ch2 0 NB. number of rows affected ddcnt '' 1
Rolling back transactions
The company is about to make a public offerring. To drive up the stock price management decides to cut salaries. Column values can be modified with an update command.
NB. give everyone a pay cut sql =: 'update tdata set salary = salary - round(salary * 0.10)' sql ddsql ch2 0 NB. how many people took a hit ddcnt '' 25
It seems the union was not happy and managed a successful boycott of the main product of the company. To smooth feathers the paycut was rolled back.
NB. roll back all transactions ddrbk ch2 0
Committing transactions
Despite the worst quarter in the history of the company, bad PR, pending shareholder lawsuits and an embitterred workforce the CEO feels he has done a good job and gives himself a hefty raise. This is one transaction that will be committed.
NB. new transaction ddtrn ch2 0 sql =:'update tdata set salary = ' sql =: sql, 'salary + 50000 where name like ''Rogerson%''' sql ddsql ch2 0 ddcnt '' 1 NB. commit transaction ddcom ch2 0
You now have been introduced to ODBC basics. Other labs will introduce more advanced material.
NB. disconnect datasources dddis ch,ch2 0 0