db gesucht
-
Hallo,
habe gehört, es gibt datenbanken die man für seine Programme benutzen kann, die man nicht installieren muss.
Das wäre konfortabler wie die Arbeit mit Textdatein.
Habe bisher nur von sqlite gehört, jedoch schaue ich da nicht so durch.
Kennt ihr noch andere und gibt es vielleicht gut verständliche Tutorials dafür??
Gruß Sebastian
-
floorball92 schrieb:
Habe bisher nur von sqlite gehört, jedoch schaue ich da nicht so durch.
wieso nicht?
http://www.sqlite.org/quickstart.html

-
ja, da war ich ja auch schon, aber blicke da einfach nicht durch. Die Grundlaen der Englischen Sprache habe ich ja, aber das verstehe ich einfach nicht.
-
-
da ist ja das englische Leichter zu verstehen, vor allem weil auch der Source Code übersetzt wird und warum zum Teufel kommt in dem deutschen Queolltext Putzfrau vor??
-
Ist hier, was Sie tun, um zu beginnen, mit SQLite zu experimentieren, ohne zu müssen, viel langwierigen Messwert und Konfiguration zu tun:
Es gibt im OpenBook "C von A bis Z" von Galileo Computing eine Anleitung zu mySQL in C. Da SQLite und mySQL beide auf SQL bauen, sollte dann das englische Tutorial von SQLite leichter zu verstehen sein.
-
Mit mySQL habe ich ja webbasiert schon gearbeitet und demnach ist mir SQL auch nicht neu, nur hat ein bekannter halt gesagt, zur Datenbank areit in Programmen solle ich die sqlite .dll verwenden, nur finde ich die verwendung damit net und bei den downloads, wo ich die geladen habe, steht auch nicht we bei den anderen was von Dokumentation. Habe auch noch nie mit .dll gearbeitet und wurde jetzt sozusagen ins kalte Wasser geworfen. Er ist jetzt im Urlaub und möchte ihn da auch nicht auf die Nerfen gehen, jedoch habe ich auch keine Lust 3 Wochen zu warten, bis er es mir erklären kann.
-
@floorball92: Die SQLite API ist sehr simpel, hab schon damit mehrmals gearbeitet. Am besten fragst du, was du nicht verstehst. Das Bsp. auf der SQLite Website ist simpel und das genügt in der Regel, um zu wissen, wie man die API verwendet.
-
Zum einen habe ich garnicht verstanden, wie ich die db erstelle. Habe as sqlite3 test.db in der console aufgerufen und es wurde nix erstellt.
Dann in dem Sampel, da wird doch der Dateiname der DB garnicht genannt.
Ich dachte es sei so:
es gibt die:
xxx.dbin der werden die Sachen gespeichert, also die Tabellen und die Datn darinne und dann habe ich ne .h die ich includiere.
dann habe ich da die Funktionen drinne, mit der ich die SQL Anfragen an diese xxx.db sende und dann die Daten erhalte.
So wie ich mir das aber gedacht habe ist irgendwie nicht.
-
Hier ein ganz einfaches Bsp:
Tabelle: customer: +-----------------------------------+ | ID | Lname | Fname | Age | +----+---------+----------+---------| | 1 | Musterm | Max | 25 | +----+---------+----------+---------| | 2 | Meier | Michael | 30 | +-----------------------------------+Mit dem sqlite Befehl kannst du die Tabelle speichern:
$ sqlite3 kunden.db sqlite> CREATE TABLE customer ( ID INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT, Lname TEXT NOT NULL, Fname TEXT NOT NULL, Age INTEGER NOT NULL DEFAULT 0); sqlite> INSERT INTO customer (Lname, Fname, Age) VALUES('Mustermann', 'Max', 25); sqlite> INSERT INTO customer (Lname, Fname, Age) VALUES('Meier', 'Michael', 30); sqlite> .quitder Code sollte eigentlich klar sein, hab den Namen der Callback Funktionen und ihre Paramter so gewählt, dass sie selbsterklärend sind.
#include <stdio.h> #include <sqlite3.h> #include <string.h> #define MAX_STR 1024 struct customer { char last_name[MAX_STR]; char first_name[MAX_STR]; int age; }; int show_menu(void) { int c; while(1) { printf("1. Show customers\n"); printf("2. Add customer\n"); printf("3. Exit\n\n"); printf("Choise: "); c = getc(stdin); while(getc(stdin) != '\n'); printf("\n\n"); switch(c) { case '1': case '2': case '3': return c; } } return 0; } /* Diese Funktion ist eine Callback Funktion. Die wird von sqlite aufgerufen, wenn man z.b. eine QUERY hat, die Daten ausgibt (z.b. SELECT). Sie wird reihenweise ausgeführt. D.h. angenommen, die QUEREY ist SELECT * FROM db und db hat 15 Zeilen, dann wird diese Funktion 15 Mal hintereinanader für jede Zeile der Tabelle ausgeführt */ int select_callback(void *userdata, int col_num, char **col_value, char **col_name) { int *num_records = userdata; printf("Customer %s: %s, %s (%s)\n", col_value[0], /* ID column */ col_value[1], /* LName column */ col_value[2], /* FName column */ col_value[3] /* age column */ ); (*num_records)++; return 0; /* do not abort execution of the SQL query */ } void print_db(sqlite3 *db) { int num_records = 0, ret; char *sql_msg_err = NULL; ret = sqlite3_exec(db, "SELECT * FROM customer", select_callback, &num_records, &sql_msg_err); if(ret != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n\n\n", sql_msg_err); sqlite3_free(sql_msg_err); return; } printf("Number of records: %d\n\n\n", num_records); } void insert_customer(sqlite3 *db) { char *sql_msg_err = NULL, line[MAX_STR]; struct customer cust; int ret; printf("Last name: "); fgets(cust.last_name, sizeof(cust.last_name), stdin); cust.last_name[strlen(cust.last_name) - 1] = 0; printf("First name: "); fgets(cust.first_name, sizeof(cust.first_name), stdin); cust.first_name[strlen(cust.first_name) - 1] = 0; printf("Age: "); fgets(line, sizeof(line), stdin); cust.age = atoi(line); sprintf(line, "INSERT INTO customer (Lname, Fname, Age) VALUES('%s', '%s', %d)", cust.last_name, cust.first_name, cust.age); /* keine Callback Funktion notwenig, da INSERT kein Rückgabe hat */ ret = sqlite3_exec(db, line, NULL, NULL, &sql_msg_err); if(ret != SQLITE_OK) { fprintf(stderr, "SQL error: %s\n\n\n", sql_msg_err); sqlite3_free(sql_msg_err); return; } printf("1 record added\n\n\n"); } int main(int argc, char **argv) { sqlite3 *db; int ret; if(argc != 2) { fprintf(stderr, "usage: %s <file name>\n", argv[0]); return 1; } ret = sqlite3_open(argv[1], &db); if(ret) { fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); return 1; } while(1) { ret = show_menu(); if(ret == '3') break; if(ret == '1') print_db(db); if(ret == '2') insert_customer(db); } sqlite3_close(db); return 0; }Wenn man SQLite benutzen will, sollte mind. diese beiden Seiten geöffnet haben:
-
Datenbank erstellen klappt schonmal, nur fehlt mir noc die sqlite3.h. Habe auch mal geschaut auf der Seite und bei google, aber habe keinen download dafür gefunden.
-
Zieh dir das Paket von sqlite.org, da ist die sqlite3.h. dabei
-
Beim erstellen der .exe kommt:
POLINK: error: Unresolved external symbol '_sqlite3_exec'.
POLINK: error: Unresolved external symbol '_sqlite3_free'.
POLINK: error: Unresolved external symbol '_sqlite3_open'.
POLINK: error: Unresolved external symbol '_sqlite3_errmsg'.
POLINK: error: Unresolved external symbol '_sqlite3_close'.
POLINK: fatal error: 5 unresolved external(s).
-
^^ du solltest schon die sqlite source-files mit ein das projekt einbinden.
-
Habe ich, habe #include <sqlite3.h> in den Source Code gepackt und es kam auch kein fehler von wegen nicht gefunden.
-
floorball92 schrieb:
Habe ich, habe #include <sqlite3.h> in den Source Code gepackt und es kam auch kein fehler von wegen nicht gefunden.
das reicht aber nicht. die .c-dateien müssen auch dabei sein (oder das ganze in form einer library oder object-files). sonst findet der linker die funktionen nicht. welche IDE benutzt du?

-
zur Zeit Pelles C, aber downloade gerade Microsoft Visual C++ weil es zu Pelles C nicht wirklich Hilfe gibt und es ein reiner C Compiller ist.
-
floorball92 schrieb:
zur Zeit Pelles C, aber downloade gerade Microsoft Visual C++ weil es zu Pelles C nicht wirklich Hilfe gibt und es ein reiner C Compiller ist.
der download einer neuen entwicklungsumgebung samt tools wird dein aktuelles problem sicherlich nicht lösen.
übrigens: pelles-c ist gar nicht so schlecht.

-
Benutzt du Pelles C??
Und wie biinde ich die anderen jetzt ein, als Lib zum Beispiel.
-
guenni81 schrieb:
Zieh dir das Paket von sqlite.org, da ist die sqlite3.h. dabei
auf der homepage findest du alles: Source Code, precompiled binaries, die DLLs, die amalgamation-version, die super zum Einbinden im eigenen Projekt ist. Wer liest ist klar im Vorteil, sagt man.
-
supertux schrieb:
auf der homepage findest du alles: Source Code, precompiled binaries, die DLLs, die amalgamation-version, die super zum Einbinden im eigenen Projekt ist. Wer liest ist klar im Vorteil, sagt man.
Das ist die Ironie des Schicksals.
Dann solltest du auch mal lesen, wie gesagt verstehe ich das nicht, weil mein English dafür nicht gut genug ist.