mSQL - Vorlesungen

Werbung
1
Copyright 1996-1997 by Axel T. Schreiner. All Rights Reserved.
7
Datenbankzugriff
Prinzip
Dieser Abschnitt beschäftigt sich mit dem Paket java.sql , das eine SQL-Schnittstelle für
Java verkapselt. Java-Programme greifen damit auf Adaptoren zu, die Verbindungen zu
kommerziellen Datenbanken wie Oracle, zu relativ frei verfügbaren Datenbanken wie mSQL
oder mysql und mit einer Brücke auch zu ODBC-Datenbanken wie Access vereinheitlichen.
Der Ausgangspunkt für diesen Abschnitt war ein Artikel von Silke Seehusen und Hans
Timmermann.
Java Application 1
Java Application 2
JDBC API
JDBC DriverManager
Driver
A
Driver
B
JDBC-Net Bridge
JDBC-ODBC
Bridge
JDBC Driver API
Listener
ODBC Driver
Manager
Driver
C
DBMS
W
DBMS
X
Driver
D
DBMS
Y
Driver
E
DBMS
Z
Das Problem besteht darin, eine Datenbank in Betrieb zu nehmen, einen passenden
JDBC-Adaptor zu installieren und dann das System zu testen. Als Datenbanken werden mSQL
, mysql und eine ODBC-Quelle betrachtet. Sql ist ein relativ einfaches Programm, mit
dem Zugriffe auf beliebige Adaptoren eingerichtet und SQL-Anweisungen ausgeführt werden
können. JDBCTest von InterSolv ist eine sehr ansprechende Applikation, mit der Adaptoren
getestet und die Umsetzung von Query- und Resultat-Aufgaben in Java-Code analysiert
werden können.
2
mSQL
mSQL ist ein recht robustes, in Quellen verfügbares SQL-System, das zum Beispiel
Universitäten frei benützen dürfen. Es gibt dazu einen JDBC-Adaptor.
Unter Linux übersetzt und installiert man mSQL wie in seinen Unterlagen beschrieben. In den
Konfigurationsdateien ist folgendes wichtig:
/usr/local/Hughes/msql.conf
Host_Lookup = False
/usr/local/Hughes/msql.acl
database=telbook
read=*
write=*
host=*
access=local,remote
Wenn der Benutzer msql eingerichtet ist und /usr/local/Hughes als HOME hat, startet man als
Admin_User den Datenbank-Server und richtet beim ersten Mal eine Datenbank ein:
$ su - msql -c ’bin/msql2d’ &
Mini SQL Version 2.0.3
Copyright (c) 1993-94 David J. Hughes
Copyright (c) 1995-97 Hughes Technologies Pty Ltd.
All rights reserved.
Loading configuration from ’/usr/local/Hughes/msql.conf’.
Server process reconfigured to accept 214 connections.
Server running as user ’msql’.
Server mode is Read/Write.
$ PATH=$PATH:/usr/local/Hughes/bin
$ msqladmin create telbook
Database "telbook" created.
3
Der mSQL-JDBC Adaptor befindet sich in imaginary.zip. Damit kann man folgendes testen:
$ CLASSPATH=.:imaginary.zip; export CLASSPATH
$ msql() {
>
java -Djdbc.drivers=com.imaginary.sql.msql.MsqlDriver Sql "$@"
> }
$ msql -s
Treiber anzeigen
drivers:
com.imaginary.sql.msql.MsqlDriver
com.imaginary.sql.msql.MsqlException: Unknown database "test"
$ msql -d telbook -Verbindung testen
$ msql -d telbook "
> create table telnumbers (
Tabelle anlegen
>
name text(10) not null, num int not null
> )" "
> create unique index idx on telnumbers (num)"
Schlüssel anlegen
create table telnumbers (
name text(10) not null, num int not null
)
1 row(s) affected.
create unique index idx on telnumbers (num)
1 row(s) affected.
$ msql -d telbook insert into telnumbers values (’axel’, 2483)
interaktiv
Werte eintragen
1 row(s) affected.
insert into telnumbers values (’bernd’, 2534)
1 row(s) affected.
select name from telnumbers
Row 1: telnumbers.name: axel
Row 2: telnumbers.name: bernd
select * from telnumbers where num = 2483
Row 1: telnumbers.name: axel
telnumbers.num: 2483
abfragen
4
mSQL/Win32
Version 1.0.16 von mSQL wurde über OS/2 zu Win32 portiert und kann ebenfalls mit dem in
Java geschriebenen mSQL-JDBC Adaptor betrieben werden. Zur Installation setzt man etwa:
install.bat
SET
SET
SET
SET
SET
SET
SET
MSQL_HOME=e:\apps\msql
MSQL_TCP_PORT=1114
SRV_MINERVA_DEBUG=
CLI_MINERVA_DEBUG=
MSQL_HOST=localhost
USER=root
EDITOR=
msql.acl
database=telbook
read=*
write=*
host=*
access=local,remote
Unter Windows startet man in zwei DOS-Fenstern den Server und richtet beim ersten Mal
eine Datenbank ein:
> msqld
mSQL Server 1.0.16 for Windows NT starting ...
Couldn’t open PID file: No such file or directory
> msqlsdm create telbook
Dann kann man von Windows oder Linux aus folgendes testen:
$ msql() {
>
java -Djdbc.drivers=com.imaginary.sql.msql.MsqlDriver Sql
-u jdbc:msql://perky:1114/ "$@"
> }
$ msql -s -d telbook drivers:
com.imaginary.sql.msql.MsqlDriver
create table telnumbers ( name char(10), num int primary key )
1 row(s) affected.
insert into telnumbers values (’axel’, 2483)
1 row(s) affected.
insert into telnumbers values (’bernd’, 2534)
1 row(s) affected.
select * from telnumbers
Row 1: telnumbers.name: axel
telnumbers.num: 2483
Row 2: telnumbers.name: bernd
telnumbers.num: 2534
5
mysql
mysql ist ein binär und in Quellen verfügbares SQL-System mit Multi-Threading, das frei
benutzt werden darf. Es gibt dazu einen JDBC-Adaptor.
Unter Linux installiert man mysql binär aus dem Archiv in /usr/local/mysql. Im
Installationsskript kann man einen zusätzlichen Verwalter eintragen:
scripts/mysql_install_db
INSERT INTO user VALUES
(’%’,’axel’,’’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’,’Y’);
Das Installationsskript sollte man als root ausführen; es startet den Server. Man kann den
Server auch so starten:
$ su root -c ’cd /usr/local/mysql && bin/mysql.server start’
Password:
Starting mysqld demon with databases from
/usr/local/mysql-3.20.32a-pc-linux-gnu-i586/data
In data/host.log entsteht ein ausführliches Protokoll. Beim ersten Mal richtet man eine
Datenbank ein:
$ PATH=$PATH:/usr/local/mysql/bin
$ mysqladmin create telbook
Database "telbook" created.
Der Adaptor befindet sich in gwe.zip. Damit kann man folgendes testen:
$ CLASSPATH=.:gwe.zip; export CLASSPATH
$ mysql() {
>
java -Djdbc.drivers=gwe.sql.gweMysqlDriver Sql
-u jdbc:mysql://cindy:3333/ "$@"
> }
$ mysql -s -d telbook drivers:
gwe.sql.gweMysqlDriver
create table telnumbers (name varchar(10), num int primary key)
java.sql.SQLException: mysql exception: No columns returned.
insert into telnumbers values (’axel’, 2483)
java.sql.SQLException: mysql exception: No columns returned.
insert into telnumbers values(’bernd’, 2534)
java.sql.SQLException: mysql exception: No columns returned.
select * from telnumbers
Row 1: telnumbers.name: axel
telnumbers.num: 2483
Row 2: telnumbers.name: bernd
telnumbers.num: 2534
6
ODBC
ODBC ist ein Standard, der unter Windows verschiedene Datenbanken einheitlich verfügbar
macht. Wenn man zum Beispiel Microsoft Access installiert, kann man die ODBC-Schnittstelle
(Microsoft Desktop ODBC-Treiber) zusätzlich installieren und dann eine Vielzahl von Tabellen,
darunter auch Textdateien, als Datenbanken benützen. Unter
Start/Einstellungen/Systemsteuerung findet man 32-Bit-ODBC
über Einrichten und Anlegen kann man eine Datenbank als Datenquelle anlegen:
7
Beim JDK (1.1.5) für Windows ist ein Adaptor bereits vorhanden, der zwischen JDBC und
ODBC vermittelt. Damit kann man folgendes testen:
> set CLASSPATH=.
> java -Djdbc.drivers=sun.jdbc.odbc.JdbcOdbcDriver
Sql -s -u jdbc:odbc: -d telbook drivers:
sun.jdbc.odbc.JdbcOdbcDriver
create table telnumbers (name string, num integer constraint pk primary key)
-1 row(s) affected.
insert into telnumbers values(’axel’, 2483)
1 row(s) affected.
insert into telnumbers values(’bernd’, 2534)
1 row(s) affected.
select * from telnumbers
Row 1: name: axel
num: 2483
Row 2: name: bernd
num: 2534
8
JDBCTest
JDBCTest ist eine Java-Applikation von InterSolv, mit der man interaktiv alle denkbaren
Operationen ausprobieren und den relevanten Java-Code sehen kann.
Herunterladen