====== SQLite für Godot ====== Auf den ersten Blick gehören Datenbanken und GameEngines nicht zusammen, aber wenn man mal ein wenig darüber nachdenkt, fallen einem viele Anwendungsbeispiele ein. SQLite ist nicht standardmäßig in Godot integriert, aber dies lässt sich projektbezogen, leicht nachholen. Zunächst benötigen wir von hier die Programmdaten:\\ [[https://github.com/khairul169/gdsqlite-native/releases]] Im Projekt wo SQLite benötigt wird, kopieren wir lediglich aus der Zip-Datei => das Verzeichnis "lib" in unser Godot-Projekt-Verzeichnis. DB Browser for SQLite mit diesem Externen Programm können wir uns die Daten in unserer Datenbank genauer ansehen.\\ [[https://sqlitebrowser.org/]] SQLite BESCHREIBUNG:\\ [[http://www.w3big.com/de/sqlite/sqlite-order-by.html]]\\ [[https://www.python-kurs.eu/sql_python.php]]\\ [[http://sql.lernenhoch2.de/lernen/]]\\ extends Node2D const SQLite = preload("res://lib/gdsqlite.gdns"); var db var spalten = {"vor_name":"CHAR(10)", "nach_name":"CHAR(10)", "geburtstag":"DATE"} func _ready(): db = SQLite.new(); open_db("meine_daten.db") # neu_tab("Kunden", spalten) var daten = ["Uwe","Meier","1963-3-15"] #neu_datensatz("Kunden", spalten, daten) #edit_datensatz("Kunden", 2, spalten, daten) #del_datensatz("Kunden", 2) abfrage("*", "Kunden", "", "geburtstag ASC", 0, 0) func open_db(name): if db.open_db("res://" + name): print("Datenbank einsatzbereit") else: print("FEHLER") func neu_tab(name, spalten): var sql = "CREATE TABLE " + name + "(" sql += "id integer PRIMARY KEY," var titel = spalten.keys() var wert = spalten.values() var durchlauf = spalten.size() for x in durchlauf: sql += titel[x] + " " + wert[x] + " NOT NULL" if x < durchlauf -1: sql += "," sql += ")" if !db.query(sql): print("FEHLER beim Tabellen erstellen") print(sql) func neu_datensatz(tabelle, spalten, wert): var sql = "INSERT INTO " + tabelle var titel = spalten.keys() sql += "(" + PoolStringArray(titel).join(",") + ")" sql += " VALUES ('" + PoolStringArray(wert).join("', '") + "')" if !db.query(sql): print("FEHLER beim schreiben einer Zeile") print(sql) func edit_datensatz(tabelle, id, spalten, wert): var sql = "UPDATE " + tabelle + " SET " var titel = spalten.keys() var durchlauf = wert.size() if spalten.size() == durchlauf: for x in spalten.size(): sql += titel[x] + " = '" + wert[x] + "'" if x < durchlauf -1: sql += "," sql += "WHERE id = " + str(id) if !db.query(sql): print("FEHLER beim editieren einer Zeile") print(sql) func del_datensatz(tabelle, id): var sql = "DELETE FROM " + tabelle + " WHERE id = " + str(id) db.query(sql) # wenn id nicht existiert ist die abfrage dennoch TRUE print(sql)# func abfrage(selekt, tabelle, bedingung, sortiere, von, maximal): var sql = "SELECT " + selekt + " FROM " + tabelle if bedingung.length() != 0: sql += " WHERE " + bedingung if sortiere.length() != 0: sql += " ORDER BY " + sortiere # spaltennamen + ASC(aufsteigend) oder DESC(absteigend) if maximal > 0: sql += " LIMIT " + str(maximal) if von > 0: sql += " OFFSETT " + str(von) print(sql) var result = db.fetch_array(sql) print(result) func _exit_tree(): db.close() Über eine (eindeutige Spalte) ID-Spalte können wir zwei Tabellen miteinander verknüpfen.\\ tab1\\ ID, Name, Adresse, E-mail\\ tab2\\ ID, Kunden_ID, Bestellung, Preis\\ sql = “SELECT * FROM tab2 JOIN tab1 ON tab2.Kunden_ID = tab1.ID“