Benutzer-Werkzeuge

Webseiten-Werkzeuge


godot:workflow:sqlite

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
godot/workflow/sqlite.txt · Zuletzt geändert: 2020/04/07 17:56 (Externe Bearbeitung)