Promoting Linux Requires Advertising. That's What Counts.
TM
Free/Open Source SQL Programming Systems
When developing a new SQL application, the developer/architect must
select a programming interface that fits the requirements of the
application. There is a rainbow of requirements to base this decision
on:
- Need It Yesterday
- Is the goal to rapidly develop a data-driven GUI application?
Then you probably shouldn't even be looking here, and
instead look at
RAD Tools.
- Multiple Database Support
- Does it have to access more than one, or even dozens of different
brands of databases?
- Multiple Operating System Support
- Does it need to run on Gnu/Linux only, or other operating systems?
- Longevity
- Will this application need to be around a decade from now? If so, it
might be dangerous to base it on a commercial product, as the
company that provides it may go out of business.
- Language Interfaces
- Is it more important to have the interfaces be in some specific
programming language, or are you willing to code in C/C++?
Note that most programming languages/environments, such as Perl,
Python, PHP and Scheme, provide 'thin' wrappers/interfaces to
an assortment of underlying C language interfaces. Some are
listed below, but you should also check language-specific sites
for more options.
- Proprietary
- Will the application be proprietary? If so, then you don't want
to write code that links to GNU GPL licensed libraries. You
want the GNU LGPL instead, or one of the other proprietary-code
friendly licenses.
- Data Dictionary/Introspection
- Does the application have to work with arbitrary, unknown database
tables? If so, then there needs to be a mechanism to discover
the tables dynamically, at run time. And not just the tables,
but also the types of the data contained in the fields, thier
names, and thier meaning.
This page is not as actively maintained as it could be. My apologies
for any link-rot that you may find.
This page is not a complete listing. Use the following cross-references
to form a more complete picture.
Hot!
If you like this page, then check out
Enterprise Linux (TM)
Data-Dictionary Programming Interfaces
Programs that need to browse unknown databases (databases
whose schema are not known at the time that the application
is being written/compiled) have to solve the problem of
figuring out what all of the SQL tables are, and what
the data types (int, float, date, string, etc.)
of each field in a table are. Collectively, this information
is called the "data dictionary". The process of discovering
what a database contains is analogous to the concept of
"object introspection" or "reflection" that is found in
Java, Scheme, CORBA's DynAny and Microsoft's C#/CLI/CLR
.net strategy. The following programming interfaces attempt
to provide the kind tools needed to be able to dynamically
discover information about a database, and manipulate it
in a straightforward manner.
- hk_classes
- hk_classes
provides a set of C++ classes for accessing SQL databases.
hk_classes is the non-graphical spin-off of
Knoda,
the KDE-based graphical forms-designer/report generator.
Handy because it allows you to perform many basic query
activitives without having to write any SQL queries.
- BondDB
- BondDB from
Treshna provides a database
access abstraction suitable for the development of data-driven
applications. BondDB is the non-GUI spin-off of the graphical,
data-driven Bond
rapid application development system. BondDB is dual-licensed
under the GPL and a commercial license. The GPL prevents
proprietary development on top of BondDB, which is exactly what
the (non-free) commercial license provides.
- libgda
- libgda
is the non-graphical spin-off of the GnomeDB project. It
provides a set of abstract programming interfaces that can
access not only SQL databases, but (in theory??) XML data
providers, flat files, LDAP databases, and (in theory)
other data sources. This project is still quite young
(i.e. alpha/beta, missing many features)
but it does provide the basic dynamic data/data dictionary
interfaces needed to explore unknown databases.
ODBC and Related Programming Interfaces
The ODBC API programming standard was developed and championed by
Microsoft to provide a single programming API to all of the commercial
SQL databases, as well as to head off a competing industry standard
that Microsoft did not control. Microsoft won, and uses ODBC to
promote other Microsoft database products at every turn. Most Windows
programmers use ODBC to connect to SQL databases. In actuality, ODBC is
not too bad: it offers almost all of the basic features and functions
that one might hope for in an SQL database API. Its only peculiarity
and bizarrness is it's insistance on using "handles": a programming
anachronism that Windows can't seem to shake. Despite this oddity,
ODBC is a workable programming interface for Unix programmers, and
is probably the best bet for anyone wishing to write code that
can connnect to dozens of different databases. There's a good selection
of alternatives, as seen below.
- unixODBC
- unixODBC
provides ODBC support for Gnu/Linux. C/C++. Dual license: GPL and LGPL,
allows both free and commercial uses. Appears to include drivers
for more than a dozen databases, including most major commercial
and free databases. (UDB, DB2, Sybase, Informix, AdabasD, Postgres,
MySQL, MiniSQL, Empress, YARD, Interbase, Linter, Mimer,
among others.)
Includes a graphical ODBC Driver Manager,
and a graphical data explorer.
Commercial support via EasySoft.
- iODBC
- iODBC is a LGPL'ed implementation
of ODBC conforming to the Microsoft and X/Open SQL CLI
(Call Level Interface) specifications.
Language wrappers available for PHP and Perl, C++, Java, Python,
TCL, others.
Dozens of drivers available, mostly for commercial databases.
Ported to dozens of different Unixes, including HP/UX, IRIX,
MacOS classic, MacOS X, SCO, Sequent, Solaris, Unixware,
AIX, FreeBSD, DG/UX and even OpenVMS.
This project appears to be an open-sourcing of the one of the
ODBC products from
OpenLink Software,
which appears to continue to be actively involved in the maintenance
of this project, and appears to offer commercial support for
these interfaces. There's a fair amount of blurring between
what's part of iODBC, and what's an OpenLink product, and the
site encourages you to explore other OpenLink products.
- ODBC++
- ODBC++
provides a set of cross-platform C++ class libraries for ODBC
access. Uses a thread-safe design, allows multi-threaded execution.
LGPL.
- FreeODBC++
- FreeODBC++
provided LGPL'ed C++ ODBC interfaces for Gnu/Linux, FreeBSD and
Windows.
The C++ interfaces are based on/derived from the JDBC class
hierarchy, and thus implements a good subset of JDBC in C++.
On Unix, this is built on top of
unixODBC, and thus offers
the same driver selection.
- sqlxx
- SQLxx
provides some simple C++ iODBC wrappers for postgres and MySQL.
LGPL.
- FreeTDS
- FreeTDS implements
the TDS (Tabular Data Stream) protocol that is used by
Sybase and Windows clients to communicate with database
servers. The native interface is C, and there are Perl
and PHP wrappers for FreeTDS. There is also a FreeTDS driver
for the JDBC 1 and 2 API's. The code is LGPL'ed, allowing
commercial software to be developed on top of it. Uses
a modern automake-based build system. Browsable CVS on
sourceforge. This is a good choice if you know that all
of your data will be on the Microsoft SQL Server.
- OTL
-
OTL provides a C++ STL stream iterator interface to ODBC,
Oracle and DB2. STL is, of course, the Standard Template Library
for C++. If you use STL, this is the thing for you.
- DTL
- DTL
makes ODBC recordsets look like an STL container. It
provides standard STL iterators. Include C++ reflection
(introspection??) support, thus automatically providing
data-dictionary/dynamic runtime discovery.
- OpenLink ODBC
- An
ODBC client library is available from
OpenLink Software.
Provides Gnu/Linux support for Oracle, Sybase, Progress,
Ingres and Informix with their client libraries.
SQL Internals
Tools, bits and pieces you might expect to find inside of an SQL database.
- SQL-Statement
- SQL-Statement
is an SQL Parser: it takes as input an SQL string, parses it, and
allows you to work with its guts. Written in perl. GPL or Artistic
License.
- Open SQL Parser
- Open SQL Parser
is written in PHP, GPL license. This is currently a very very young
project, currently at version 0.0.3.
- ga SQL parser for Delphi 5, Delphi 6 and Kylix
ga SQL parser for
Delphi 5, Delphi 6 and Kylix. GPL license. A fairly young project.
Other SQL Programming Interfaces and Tools
Other systems.
- SQL Fairy
- SQL Fairy is a tool
for converting between one SQL dialect and another. It is also capable
of generating documentation, HTML and XML as output. Written in perl,
GPL license.
- SQSH
- The SQSH
SQL Shell for Unix provides a powerful interface for Sybase
and Microsoft SQL databases. Basically allows extensive shell
scripting.
- EasySQL
- EasySQL provides
a uniform interface library (API) to MiniSQL and MySQL.
Non-free, shareware, includes source code.
- MultiBase
- MultiBase
is a 4GL and development environment for the rapid deployment of
SQL applications.
- Vortex
- Vortex from
Trifox
offers a uniform API/concurrent access tool to a large number
of databases, including most major SQL vendors, as well as
flat-file ADABAS C, ISAM and FoxBase, dBase databases.
In particular, take a look at:
Both support Adabas D.
- Recital SDK
- Recital offers an
SDK (Software
Developers Kit)
Documentation, Other Notes
History
Last Updated June 2003 by Linas Vepstas
linas@linas.org
Copyright (c) 1996-2003 Linas Vepstas.
Permission is granted to copy, distribute and/or modify this document
under the terms of the GNU Free Documentation License, Version 1.1;
with no Invariant Sections, with no Front-Cover Texts, and with no
Back-Cover Texts. A copy of the license is included at the URL
http://www.linas.org/fdl.html,
the web page titled
"GNU Free Documentation License".
All trademarks belong to their respective owners.
Go Back to the Enterprise Linux(TM) Page
Go Back to the Linas' Home Page