Simple Client

Einleitung

Die Jdbc Treiber werden im Jar Format ausgeliefert. Im Jar-File ist ein einfacher Jdbc-Client enthalten, der Simple Client heißt und mit dem SQL-Abfragen abgesetzt werden können.

Der Simple Client kann einfach mit Java gestartet werden, etwa so:

  • CvsJdbc Treiber: java -jar csvjdbc.jar
  • ExcelJdbc Treiber: java -jar exceljdbc.jar
  • JsonJdbc Treiber: java -jar jsonjdbc.jar

Nach dem Start meldet sich der Client mit Angabe seiner Version und einem Prompt:

Simple jdbc client, 1.1
> 

Der Simple Client unterstützt die folgenden Befehle:

    connect .... Öffnet eine Datenbankverbindung mit einer Jdbc Url
    load ....... Lädt einen Jdbc Treiber mit seinem Klassennamen
    quit ....... Beendet das Programm
    help ....... Zeigt Hilfe an
    run ........ Führt eine Kommandodatei aus
    select ..... Führt eine SQL-Abfrage aus
    status ..... Zeigt den aktuellen Status
    trace ...... Zeigt Details des letzten aufgetretenen Fehlers

Erste Abfrage

Nach dem Start ist bereits der Default-Jdbc-Treiber geladen werden. Das kann man mit dem "status" Befehl überprüfen und sieht zum Beispiel beim CsvJdbc Jar-File so aus:

> status
I have found the following drivers:
    Driver: de.softquadrat.jdbc.csv.CsvDriver, 1.0
Your current connection is:
    --- none ---

Jetzt kann eine Datenbankverbindung mit dem "connect" Befehl geöffnet werden. Dazu wird die vom Treiber unterstütze Jdbc-Url angegeben

  • CvsJdbc Treiber: 'jdbc:csv:'
  • ExcelJdbc Treiber: 'jdbc:xlsx:'
  • JsonJdbc Treiber: 'jdbc:json:'
> connect 'jdbc:csv:'
Connection successfully opened.
> status
I have found the following drivers:
    Driver: de.softquadrat.jdbc.csv.CsvDriver, 1.0
Your current connection is:
    datasqill csv driver, 1.0

Wichtig sind die einfachen Anführungsstriche, in die die Jdbc-Url eingeschlossen werden muss.

Danach können Abfragen abgesetzt werden wie etwa:

> SELECT x,y,z
  -   FROM "chinook.Track.csv" COLUMNS (x,y,z) SEPARATED BY '|'
  -  WHERE rownumber <= 8;
x y z
- - - 
TrackId Name AlbumId 
1 For Those About To Rock (We Salute You) 1 
2 Balls to the Wall 2 
3 Fast As a Shark 3 
4 Restless and Wild 3 
5 Princess of the Dawn 3 
6 Put The Finger On You 1 
7 Let's Get It Up 1 

Hinweis: Bei Abfragen, die sich über mehrere Zeilen erstrecken, verwendet der Simple Client ein Minuszeichen als Prompt zur Kennzeichnung.

Run Kommando

Mit dem "run" Befehl können Kommdodateien mit Befehlen ausgeführt werden. Als Beispiel könnte man etwa folgende Datei "cmd.sql" starten:

load 'de.softquadrat.jdbc.csv.CsvDriver'
connect 'jdbc:csv:'
SELECT x,y,z
FROM "chinook.Track.csv" COLUMNS (x,y,z) SEPARATED BY '|'
WHERE rownumber <= 8;
> run 'cmd.sql'
load 'de.softquadrat.jdbc.csv.CsvDriver'
Driver "de.softquadrat.jdbc.csv.CsvDriver" loaded successfully.
connect 'jdbc:csv:'
Connection successfully opened.
SELECT x,y,z
FROM "chinook.Track.csv" COLUMNS (x,y,z) SEPARATED BY '|'
WHERE rownumber <= 8;
x y z
- - - 
TrackId Name AlbumId 
1 For Those About To Rock (We Salute You) 1 
2 Balls to the Wall 2 
3 Fast As a Shark 3 
4 Restless and Wild 3 
5 Princess of the Dawn 3 
6 Put The Finger On You 1 
7 Let's Get It Up 1 

Argumente

Der Simple Client kann mit Kommandodateien als Argumente gestartet werden. Dann öffnet das Programm diese Dateien nacheinander und führt die darin enthaltenen Befehle aus. Das kann benutzt werden, um Initialisierungen vorzunehmen und Standardabfragen abzusetzen.

Wird etwa die Datei "cmd.sql" als Argument übergeben, so werden zunächst alle Befehle ausgeführt, bevor dann das Benutzerprompt zur Eingabe erscheint:

$ java -jar csvjdbc.jar cmd.sql 
Simple jdbc client, 1.1
load 'de.softquadrat.jdbc.csv.CsvDriver'
Driver "de.softquadrat.jdbc.csv.CsvDriver" loaded successfully.
connect 'jdbc:csv:'
Connection successfully opened.
SELECT x,y,z
FROM "chinook.Track.csv" COLUMNS (x,y,z) SEPARATED BY '|'
WHERE rownumber <= 8;
x y z
- - - 
TrackId Name AlbumId 
1 For Those About To Rock (We Salute You) 1 
2 Balls to the Wall 2 
3 Fast As a Shark 3 
4 Restless and Wild 3 
5 Princess of the Dawn 3 
6 Put The Finger On You 1 
7 Let's Get It Up 1 
> 

Hinweis: Enthält die übergebene Kommandodatei den "quit" Befehl, so endet die Ausführung direkt ohne den nachfolgenden Wechsel in den interaktiven Benutzermodus.

CsvJdbc

Für die Beispiele wird folgende csv-Datei verwendet: Beispiel csv

jdbc-Client starten

java -jar csvjdbc.jar

Ausgabe

Simple jdbc client, 1.0

Verbinden zum Treiber

connect 'jdbc:csv:'

Ausgabe

Connection successfully opened.

Selektiere die ersten 3 Spalten aus der Datei chinook.Track.csv und gib ihnen die Namen x, y und z

Lies die ersten 8 Rows

SELECT x,y,z
  FROM "chinook.Track.csv" COLUMNS (x,y,z) SEPARATED BY '|'
 WHERE rownumber <= 8;

Ausgabe

x y z
- - -
TrackId Name AlbumId
1 For Those About To Rock (We Salute You) 1
2 Balls to the Wall 2
3 Fast As a Shark 3
4 Restless and Wild 3
5 Princess of the Dawn 3
6 Put The Finger On You 1
7 Let's Get It Up 1

Selektiere die ersten 3 Spalten aus der Datei chinook.Track.csv, gib ihnen die Namen x, y und z und überspringe die Kopfzeile

Lies 8 Rows

SELECT x,y,z
  FROM "chinook.Track.csv" COLUMNS (x,y,z) SEPARATED BY '|'
 WHERE rownumber > 1
   AND rownumber <= 9;

Ausgabe

x y z
- - -
1 For Those About To Rock (We Salute You) 1
2 Balls to the Wall 2
3 Fast As a Shark 3
4 Restless and Wild 3
5 Princess of the Dawn 3
6 Put The Finger On You 1
7 Let's Get It Up 1
8 Inject The Venom 1

Selektiere die ersten 3 Spalten aus der Datei chinook.Track.csv und gib ihnen die Namen TrackId (case sensitiv), name (insensitiv) und AlbumId (insensitiv)

Lies die ersten 8 Rows

SELECT "TrackId",name,AlbumId
  FROM "chinook.Track.csv" COLUMNS ("TrackId",Name,AlbumId) SEPARATED BY '|'
 WHERE rownumber <= 8;

Ausgabe

TrackId name albumid
------- ---- -------
TrackId Name AlbumId
1       For Those About To Rock (We Salute You) 1
2       Balls to the Wall 2
3       Fast As a Shark 3
4       Restless and Wild 3
5       Princess of the Dawn 3
6       Put The Finger On You 1
7       Let's Get It Up 1

Selektiere 3 Spalten aus der Datei chinook.Track.csv mit den Headername in Zeile 1 vom csv und SQL-Namen TrackId, Name und AlbumId

  • Der Vergleich zwischen den Angaben in der COLUMNS-Clause und den Titeln im csv in Zeile 1 erfolgt case insensitive.

Lies die ersten 8 Rows

SELECT TrackId,Name,AlbumId
  FROM "chinook.Track.csv" COLUMNS (trackid,Name,AlbumId) HEADLINE 1 SEPARATED BY '|'
 WHERE rownumber <= 8;

Ausgabe

trackid name albumid
------- ---- -------
1       For Those About To Rock (We Salute You) 1
2       Balls to the Wall 2
3       Fast As a Shark 3
4       Restless and Wild 3
5       Princess of the Dawn 3
6       Put The Finger On You 1
7       Let's Get It Up 1
8       Inject The Venom 1

Tauscht man in der COLUMNS-Clause die Spalten Name und trackid so bekommt man das gleiche Ergebnis wie zuvor.

SELECT TrackId,Name,AlbumId
  FROM "chinook.Track.csv" COLUMNS (Name,trackid,AlbumId) HEADLINE 1 SEPARATED BY '|'
 WHERE rownumber <= 8;

Das passiert nicht, wenn man die Spalten mit den Kopfzeilen im csv matched (via HEADLINE 1). Somit kann der Lieferant die Reihenefolge beliebig vetrauschen, so lange die Überschriften (=Namen) in der Kopfzeile immer gleich angegeben werden

ExcelJdbc

Für die Beispiele wird folgendes Excel verwendet: Beispiel Excel

jdbc-Client starten

java -jar exceljdbc.jar

Ausgabe

Simple jdbc client, 1.0

Verbinden zum Treiber

connect 'jdbc:xlsx:'

Ausgabe

Connection successfully opened.

Selektiere die ersten 3 Spalten aus dem Tabellenblatt Track und gib ihnen die Namen x, y und z

Lies die ersten 8 Rows

SELECT x,y,z
  FROM "chinook.xlsx"."Track" COLUMNS (x,y,z)
 WHERE rownumber <= 8;

Ausgabe

x y z
- - -
TrackId Name AlbumId
1 For Those About To Rock (We Salute You) 1
2 Balls to the Wall 2
3 Fast As a Shark 3
4 Restless and Wild 3
5 Princess of the Dawn 3
6 Put The Finger On You 1
7 Let's Get It Up 1

Selektiere die ersten 3 Spalten aus dem Tabellenblatt Track und gib ihnen die case sensitiven Namen TrackId, Name und AlbumId

Lies die ersten 8 Rows

SELECT "TrackId","Name","AlbumId"
  FROM "chinook.xlsx"."Track" COLUMNS ("TrackId","Name","AlbumId")
 WHERE ROWNUMBER <= 8;

Ausgabe

TrackId Name AlbumId
------- ---- -------
TrackId Name AlbumId
1       For Those About To Rock (We Salute You) 1
2       Balls to the Wall 2
3       Fast As a Shark 3
4       Restless and Wild 3
5       Princess of the Dawn 3
6       Put The Finger On You 1
7       Let's Get It Up 1

Selektiere die ersten 3 Spalten aus dem Tabellenblatt Track und gib ihnen die case insensitiven Namen TrackId, Name und AlbumId

Lies die ersten 8 Rows

SELECT TrackId,Name,AlbumId
  FROM "chinook.xlsx"."Track" COLUMNS (TrackId,Name,AlbumId)
 WHERE ROWNUMBER <= 8;

Ausgabe

trackid name albumid
------- ---- -------
TrackId Name AlbumId
1       For Those About To Rock (We Salute You) 1
2       Balls to the Wall 2
3       Fast As a Shark 3
4       Restless and Wild 3
5       Princess of the Dawn 3
6       Put The Finger On You 1
7       Let's Get It Up 1

Selektiere 3 Spalten aus dem Tabellenblatt Track mit den Headername im Excel und SQL-Namen TrackId, Name und AlbumId

  • Der Vergleich zwischen den Angaben in der COLUMNS-Clause und den Titeln im Excel in Zeile 1 erfolgt caseinsensitive.

Lies die ersten 8 Rows

SELECT TrackId,Name,AlbumId
  FROM "chinook.xlsx"."Track" COLUMNS (TrackId,Name,AlbumId) HEADLINE 1
 WHERE ROWNUMBER <= 8;

Ausgabe

trackid name albumid
------- ---- -------
1       For Those About To Rock (We Salute You) 1
2       Balls to the Wall 2
3       Fast As a Shark 3
4       Restless and Wild 3
5       Princess of the Dawn 3
6       Put The Finger On You 1
7       Let's Get It Up 1
8       Inject The Venom 1

Selektiere 3 Spalten aus dem Tabellenblatt Track mit den Headername im Excel und SQL-Namen Name, TrackId und Composer

Lies die ersten 8 Rows

SELECT Name,TrackId,Composer
  FROM "chinook.xlsx"."Track" COLUMNS (TrackId,Name,Composer) HEADLINE 1
 WHERE ROWNUMBER <= 8;

Ausgabe

name trackid composer
---- ------- --------
For Those About To Rock (We Salute You) 1 Angus Young, Malcolm Young, Brian Johnson
Balls to the Wall 2 null
Fast As a Shark 3 F. Baltes, S. Kaufman, U. Dirkscneider
Restless and Wild 4 F. Baltes, R.A. Smith-Diesel, S. Kaufman, U. Dirkscneider
Princess of the Dawn 5 Deaffy
Put The Finger On You 6 Angus Young, Malcolm Young, Brian Johnson
Let's Get It Up 7 Angus Young, Malcolm Young, Brian Johnson
Inject The Venom 8 Angus Young, Malcolm Young, Brian Johnson

Selektiere eine Spalte die nicht im Excel existiert

Lies die ersten 8 Rows

SELECT Name1
  FROM "chinook.xlsx"."Track" COLUMNS (TrackId,Name1,Composer) HEADLINE 1
 WHERE ROWNUMBER <= 8;

Ausgabe

required column name name1 not found in xlsx file [xl/worksheets/sheet1.xml]