java.sql.SQLException: No suitable driver found for ‘jdbc:derby:…

Kleine Gemeinheit im “Using dblook” guide (Übersichtslink):

dblook -verbose -d ‘jdbc:derby:pathToDBDBName’

— Zeitmarke: 2010-01-04 12:27:34.578
— Quellendatenbank: pathToDBDBName
— Verbindungs-URL: ‘jdbc:derby:pathToDBDBName
— appendLogs: false

java.sql.SQLException: No suitable driver found for ‘jdbc:derby:pathToDBDBName
at java.sql.DriverManager.getConnection(DriverManager.java:602)
at java.sql.DriverManager.getConnection(DriverManager.java:207)
at org.apache.derby.tools.dblook.go(Unknown Source)
at org.apache.derby.tools.dblook.(Unknown Source)
at org.apache.derby.tools.dblook.main(Unknown Source)
— **–> DEBUG: No suitable driver found for ‘jdbc:derby:pathToDBDBName

(Fast) Derselbe Aufruf geht via ij und NetBeans …

Lösung: dblook -d jdbc:derby:pathToDBDBName
Unterschied: einfach ohne die Hochkommata, auch wenn es im Guide immer wieder mal mit Gänsefüßchen steht.

Derby 10.5 mit Fetch/Offset

Gerade gesehen, dass es in Derby 10.5 auch ein Limit-Äquivalent geben soll (mehr dazu hier).

Im Beispiel:

ij> SELECT NAME, SCORE FROM RESULTS ORDER BY SCORE DESC
> FETCH FIRST 3 ROWS ONLY;
NAME      |SCORE
----------------------
John      |33
Anne      |28
Sue       |21

Ein “richtiges” Limit wird es nicht geben, da es (noch?) nicht Teil des SQL-Standards ist.

Siehe auch SQL:2008.

Create Table IF NOT EXISTS … in JavaDB/Derby

In MySQL gibt es das praktische Konstrukt “Create Table IF NOT EXISTS foo”.
Möchte man dieselbe Funktionalität in Apache Derby/JavaDB, wird oft empfohlen, ein
Select auf die entsprechende Tabelle durchzuführen und die entsprechende Exception
abzufangen (siehe z.B. hier). – Für ambitionierte Programmierer nur bedingt akzeptabel,
da Flußkontrolle durch Exceptions nur im Ausnahmefall eine schöne Lösung darstellt (siehe z.B. hier).

Eine schönere Lösung ist es, zu prüfen, ob die Tabelle (hier “Foo”) existiert, um dann ohne Exception
entsprechen reagieren zu können:

DatabaseMetaData dmd = conn.getMetaData();
ResultSet rs = dmd.getTables(null,”APP”, “FOO”,null);
if (!rs.next()) {
s.executeUpdate(“CREATE TABLE FOO (I INT)”);
}