Generated Key Management in der sQLshell

29.09.2025

Ich habe an einem neuen Feature der sQLshell gearbeitet, das die manuelle Dateiengabe extrem vereinfacht.

Dabei wollte ich das Problem adressieren, das bei der manuellen Eingabe von Daten in ein Datenmodell entsteht, das referentielle Integrität über Fremdschlüsselbeziehungen sicherstellt:

Daten werden in so einem Modell meist eingegeben, indem Datensätze in verschiedenen Tabellen hinzugefügt werden, die die Schlüssel der neuen Datensätze in anderen Tabellen benötigen, um sie korrekt in die Fremdschlüsselspalten einzufügen. Das ist noch einfach - wenn auch mühsam - wenn diese Schlüssel nicht automatisch gefüllt, sondern explizit spezifiziert werden. Schwierig wird es aber, wenn es sich um Autoincrement-Spalten handelt oder die Werte der Schlüsselspalten auf andere Art und Weise im Datenbankmanagementsystem erzeugt werden - etwa über Formeln (Beispiel: Benutzung von NOW() zur Erzeugung der Werte für Timestamp-Spalten).

Daher hat die sQLshell nun einen Mechanismus, sich an die Werte (alle - sowohl die explizit angegebenen, wie auch die generierten) der letzten neu hinzugefügten Zeile einer jeden Tabelle zu erinnern und diese Werteentsprechend vorzuschlagen, wo es passt: Damit ist zum Beispiel der Dialog zum Einfügen einer neuen Zeile in eine Tabelle, die Fremdschlüssel von anderen importiert, nicht mehr komplett leer - die entsprechenden ComboBoxen in der GUI sind mit den zuletzt eingefügten Werten der entsprechenden Spalten der importierten Tabellen vorbefüllt.

Das funktioniert auch, wenn eine Tabelle mehrere Fremdschlüssel importiert: So lange in allen importierten Tabellen in der aktuellen Sitzung neue Zeilen eingefügt wurden, sind diese bereits in den ComboBoxen diesem Dialog vorbefüllt!

Dieser Mechanismus funktioniert sowohl für die Erstellung neuer Zeilen übder die GUI der sQLshell als auch über INSERT Statements im SQL-Editor. Auch neue Zeilen, die über Plugins eingefügt werden, werden in diesen Mechanismus einbezogen. Lediglich direkt über ein PreparedStatement eingefügte Zeilen können dafür nicht berücksichtigt werden.

Würden etwa in einem Datenmodell, das eine M-zu-N Beziehung wie folgt definiert:

Screenshot Modell einer M-zu-N Beziehung

neue Datensätze in die Tabellen author und publication eingefügt, indem die folgenden Anweisungen in der sQLshell im SQL-Editor ausgeführt würden

INSERT INTO author (id, name) VALUES (10000, 'Jules Verne');
INSERT INTO publication (id, date, name) VALUES (20000,'1875-03-03', 'Die geheimnisvolle Insel');

und würde anschließend der Dialog für die Inhaltsansicht der Tabelle authorpublicationmapping geöffnet, um eine entsprechende Verknüpfung mittels der GUI hinzuzufügen, würde der entsprechende Dialog wie beschrieben vorbefüllt geöffnet:

Screenshot Dialog zur Definition der Beziehung

Weiterhin ist es möglich, einen View zu öffnen, der die zuletzt eingefügte Zeile einer Tabelle enthält. Über die Scripting-API der sQLshell kann das zum Beispiel mit folgendem Code geschehen:

de.netsysit.db.logic.TableDescription[] tds=sQLshellAPI.getCurrentlyVisibleShell().getSelectedTableDescriptions();
if((tds!=null)&&(tds.length>0))
{
	for(int i=0;i<tds.length;++i)
	{
		query=sQLshellAPI.getCurrentlyVisibleShell().getDBMSInterface().generateSelectCommand(tds[i],sQLshellAPI.getCurrentlyVisibleShell().getConnection());
		if(query!=null)
		{
			de.netsysit.db.logic.FilterExpression fe=new de.netsysit.db.logic.FilterExpression(query.substring(query.toUpperCase().indexOf("WHERE")));
			sQLshellAPI.getCurrentlyVisibleShell().openContentView(tds[i],fe);
		}
		else
			java.awt.Toolkit.getDefaultToolkit().beep();
	}
}
else
	java.awt.Toolkit.getDefaultToolkit().beep();

komplett leer

Alle Artikel rss Wochenübersicht Monatsübersicht Codeberg Repositories Mastodon Über mich home xmpp


Vor 5 Jahren hier im Blog

  • Generator-Framework in JMeter integriert

    27.09.2020

    Nachdem ich neulich zwei neue Container für Software-Tests zu meinem Docker-Zoo hinzugefügt habe ist es nun an der Zeit, ein weiteres Hilfsmittel für Software-Tests mit JMeter vorzustellen

    Weiterlesen

Neueste Artikel

  • LinkCollections 2025 X

    Nach der letzten losen Zusammenstellung (für mich) interessanter Links aus den Tiefen des Internet von 2025 folgt hier gleich die nächste:

    Weiterlesen
  • GUI zur Logback Konfiguration

    Ich habe mich immer wieder darüber geärgert, wenn ich gerade mitten im Entwickeln neuer Features bin und irgendetwas nicht klappt. Dann wollte ich versuchen, herauszufinden, was der Grund dafür sein könnte und natürlich ist das Logging für die eine interessante Klasse gerade deaktiviert. Also: Konfigurationsdatei fürs Logging editieren, speichern, Anwendung neu starten... Damit sollte endlich Schluss ein!

    Weiterlesen
  • GitLab und PlantUML Intgration

    Ich fand neulich dieses vielversprechende Issue zu GitLab und dachte mir, das wäre ein guter Grund, meine lokal gehostete Instanz wieder einmal zu aktualisieren!

    Weiterlesen

Manche nennen es Blog, manche Web-Seite - ich schreibe hier hin und wieder über meine Erlebnisse, Rückschläge und Erleuchtungen bei meinen Hobbies.

Wer daran teilhaben und eventuell sogar davon profitieren möchte, muss damit leben, daß ich hin und wieder kleine Ausflüge in Bereiche mache, die nichts mit IT, Administration oder Softwareentwicklung zu tun haben.

Ich wünsche allen Lesern viel Spaß und hin und wieder einen kleinen AHA!-Effekt...

PS: Meine öffentlichen Codeberg-Repositories findet man hier.