Loading...
 

Crystal und MySql

Hier erklären wir, wie man mit Crystal eine MySql-Datenbank bedient. Wir gehen davon aus, dass ihr bereits grundlegende Kenntnisse über Datenbanken und MySql habt.

Beispieltabelle

Diese Tabelle soll als Grundlage für alle Beispiele auf dieser Seite dienen.

Feldname id name kurz ordnungszahl
Datentyp INT(11) VARCHAR(20) VARCHAR(4) INT(11)
1 Wasserstoff H 1


Die Spalte 'id' beinhaltet den Primary Key und ist 'auto increment'.

Crystal MySql-Treiber

Als Treiber verwenden wir folgendes Packet:
crystal-mysql

Dieser Treiber muss wie folgt in eure 'shard.yml' eingebunden werden:

# mysql
  mysql:
    github: crystal-lang/crystal-mysql



Im Code braucht ihr dann noch:
require "mysql"

Verbindungsaufbau zum DB-Server

Der Verbindunsaubau zum DB-Server erfolgt nach folgender Syntax:

DB.open "mysql://user:password@ip:port/db_name"


Daten einfügen

Fügen wir unsere erste Datenzeile ein:

require mysql

# Die Verbindung speichern wir in einer Konstanten. Damit haben wir globalen Zugriff drauf.
DATABASE = DB.open "mysql://user:password@ip:port/db_name"

DATABASE.exec "INSERT INTO elemente VALUES (?, ?, ?, ?)", nil, "Wasserstoff", "H", 1

DATABASE.close


Die vier ? stehen für die vier Tabellenfelder und werden mit den dahinter aufgeführten Werten befüllt.
'nil' brauchen wir für den Primary Key, der automatisch hochzählt.


Eine etwas elegantere Möglichkeit sehen wir hier:

require mysql
DATABASE = DB.open "mysql://user:password@ip:port/db_name"

# Datenarray anlegen mit den Datentypen, die Verwendung finden
data = [] of (Nil | String | Int32)

# Array mit Werten füttern
data << nil
data << "Helium"
data << "He"
data << 2

# Übergabe der Werte mit args: data
DATABASE.exec "INSERT INTO elemente VALUES (?, ?, ?, ?)", args: data

# geht auch mit Angabe der Feldnamen
DATABASE.exec "INSERT INTO elemente  (id, name, kurz, ordnungszahl) VALUES (?, ?, ?, ?)", args: data

#Schliessen der Verbindung - 
DATABASE.close


last_insert_id und rows_affected

Will man die zuletzt eingefügte id vom Primary Key haben, geht das mit 'last_insert_id':

require mysql
DATABASE = DB.open "mysql://user:password@ip:port/db_name"

# Datenarray anlegen mit den Datentypen, die Verwendung finden
data = [] of (Nil | String | Int32)

# Array mit Werten füttern
data << "Helium"
data << "He"
data << 2

# wenn man die Feldnamen angibt, kann man auch auf die Nil-Werte verzichten
result = db.exec "INSERT INTO elemente  (name, kurz, ordnungszahl) VALUES (?, ?, ?)", args: data

# gibt die ID vom letzten Insert zurück
letzte_id = result.last_insert_id

# so viele Datenzeilen wurden erzeugt
betroffene_zeilen = result.rows_affected

DATABASE.close


Daten lesen