welche db
-
ich nutze nur reines c++ (bisher)
-
sooo wie gehe ich nun da ran?
1. Ich downloade mir dieses Datei:
sqlite-3_6_23_1.zip (254.52 KiB)A command-line program for accessing and modifying SQLite databases.Ich packe sie irgendwo hin und erstelle mir darüber eine sql testdatei und nehme paar Testeinträge vor.
So und dann kann ich doch eigentlich schon dieses Programm hier verwenden, oder?
#include <stdio.h> #include <sqlite3.h> static int callback(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i=0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0; } int main(int argc, char **argv){ sqlite3 *db; char *zErrMsg = 0; int rc; if( argc!=3 ){ fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]); exit(1); } rc = sqlite3_open(argv[1], &db); if( rc ){ fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg); if( rc!=SQLITE_OK ){ fprintf(stderr, "SQL error: %s\n", zErrMsg); sqlite3_free(zErrMsg); } sqlite3_close(db); return 0; }
Bloß woher bekommt man die sqlite3.h? Oder ist die im Standard mit drinne?
-
sarah r. schrieb:
sooo wie gehe ich nun da ran?
Wie wäre es, wenn du dich erst einmal auf der entsprechenden Seite informierst (Das was du fragst hat jedenfalls nichts mehr mit C++ als solchen zu tun)?
Auf der Seite gibt es jedenfalls unter "Common Links" einige Punkte (z.B "Getting Started" oder "C/C++ Interface Spec") die darauf deuten, das du darunter fündig werden könntest, zudem scheint es wohl so etwas wie Mailinglisten usw. zu geben.
-
ja ich habs ja gelesen aber komme damit nicht ganz zurecht.
ich will eine normale konsoleneingabe in einer sql-datenbank speichern.
aber ich weiß nicht - auch mit hilfe der seite - wie ich das realisieren soll.
-
Dieser Thread wurde von Moderator/in pumuckl aus dem Forum C++ in das Forum Datenbanken verschoben.
Im Zweifelsfall bitte auch folgende Hinweise beachten:
C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?Dieses Posting wurde automatisch erzeugt.
-
Ist es überhaupt möglich, ganz normale cin Eingaben in einer SQl DB zu speichern und diese auch wieder über eine C++ Applikation auszugeben?
-
sarah r. schrieb:
ja ich habs ja gelesen aber komme damit nicht ganz zurecht.
ich will eine normale konsoleneingabe in einer sql-datenbank speichern.
aber ich weiß nicht - auch mit hilfe der seite - wie ich das realisieren soll.Gegenfrage, da du schon den Begriff "SQL"-Datenbank anführst, und man nicht ganz klar erkennen kann was dein Problem ist (Ich habe mit sqlite selbst noch nie gearbeitet):
Geht es jetzt noch immer um die Headerproblematik? Oder scheitert es am Speichern (und hier im speziellen: Kannst du SQL?)?
-
confused_men schrieb:
Ist es überhaupt möglich, ganz normale cin Eingaben in einer SQl DB zu speichern und diese auch wieder über eine C++ Applikation auszugeben?
Warum sollte die nicht gehen? Ja, direkt geht es nicht, aber man kann die Eingaben ja entgegen nehmen und per Insert in eine Datenbank einfügen...
Wie heißt es so schön? Wen etwas direkt nicht umsetzbar ist, füge eine Ebene der Indirektion hinzu.
-
man kann die Eingaben ja entgegen nehmen
Wie meinst du das? Also die cin-Eingabe in eine Stringvariabel speichern?
-
confused_men schrieb:
man kann die Eingaben ja entgegen nehmen
Wie meinst du das? Also die cin-Eingabe in eine Stringvariabel speichern?
Wie willst du es den sonst machen?
-
ja das war ja für mich irgendwie selbstverständlich, deswegen verwirrte mich die aussage
hat mal jemand nen beispielcode, wo eingaben in einer sql-db gespeichert werden?
das wäre echt super.
-
confused_men schrieb:
hat mal jemand nen beispielcode, wo eingaben in einer sql-db gespeichert werden?
Das hängt sehr stark von der DB-Schnittstelle ab, sqlite hat z.B. einige Beispiele - diese sehen wiederum gänzlich anders aus, als z.B. bei VCL-Komponenten vom C++ Builder, oder über .Net...
Im Endeffekt wird dies eine Insert-Klausel sein, die man entweder (im Schlechten Fall) per Stringaddition zusammenbaut, oder mittels Parametern setzt. Aber die Syntax ist ganz stark von der Schnittstelle abhängig (die SQL-Statements wiederum sind in der Regel relativ ähnlich).
-
Also letzendlich suche ich auch eine Methode wie ich über ganz normale Befehle z.b. SQL_QUERY ("INSERT ....");
meine SQL (oder andere lokale) Datenbank bearbeiten kann. Soll so unkompliziert wie möglich sein. Habs leider noch nciht hintbekommen.
-
confused_men schrieb:
Soll so unkompliziert wie möglich sein.
Warum kapselst du dann nicht einfach deine Datenbankschnittstelle entsprechend?
-
Ok frag ich mal anders: Ich habe mit c++ ein kleines Adressbuch geschrieben und möchte die Einträge nicht in einer .txt sondern ini einer DB speicher, wie würdest du rangehen.?
-
confused_men schrieb:
Ok frag ich mal anders: Ich habe mit c++ ein kleines Adressbuch geschrieben und möchte die Einträge nicht in einer .txt sondern ini einer DB speicher, wie würdest du rangehen.?
Die Antwort wird dir nicht gefallen, aber es gibt nunmal keine einheitliche Datenbankschnittstelle für C++, sondern Viele.
1. Eine entsprechende Datenbank wählen.
2. Eine passende Datenbankschnittstelle wählen.
3. Je nach Projektgröße diese Datenbankschnittstelle direkt im Code einsetzen oder die Zugriffe auf die Datenbank hinter eine Schnittstelle kapseln (Hierzu erwähne ich einfach mal den Begriff "Mehrschichtenarchitektur").Die Verwendung einer Datenbank ist immer komplexer als ein einfacher Dateizugriff. Die Frage ist aber: Was machst du daraus. Teile und Herrsche, entscheide selbst darüber wie komplex die Verwendung ist (Verberge den nötigen DB-Zugriff z.B. hinter eine Klasse oder Klassenhierarchie, die nach Außen hin eine einfache Schnittstelle bietet). Je nach Datenbankschnittstelle (die wiederum ggf. Compiler-, Frameworkabhängig sein kann) ist der Zugriff schwerer oder leichter.
Einfach empfinde ich z.B. die Verwendung der VCL (C++ Builder), nur gibt es inzwischen keine kostenlose Version des Selben mehr, und die Kosten sind für normale Privatanwender zu hoch.
-
asc schrieb:
Die Verwendung einer Datenbank ist immer komplexer als ein einfacher Dateizugriff.
Einspruch. Wenn ich strukturierte Daten wie beispielsweise ein Adressbuch habe, kann es eine kleine Herausforderung sein, die Daten strukturiert in einer flachen Datei unterzubringen. Zumindest wenn man den Anspruch hat, es richtig zu machen.
Ich könnte beispielsweise meine Adressen im csv-Format speichern. Dann muss ich das csv-Format aber auch wieder parsen. Und wenn mein Trennzeichen beispielsweise ein Komma ist, was ist, wenn meine Daten ein Komma enthalten? Oder ein Bemerkungsfeld, welches auch Zeilenschaltungen enthalten kann?
XML wäre eine Alternative. Da brauche ich "nur" einen XML Serialisierer und Parser. Ob das einfacher ist, als eine einfache Datenbankschnittstelle wage ich zu bezweifeln.
Ich habe selbst mal eine Datenbankabstraktionsschicht geschrieben, die sehr einfach zu benutzen ist. Da reichen ein paar Zeilen Code und meine Daten sind in der Datenbank. Und ein paar weitere Zeichen und sie sind wieder im Speicher. Und alles ohne mit irgendwelchen Escape-Zeichen rum zu hantieren um SQL Injection zu verhindern.
-
tntnet schrieb:
asc schrieb:
Die Verwendung einer Datenbank ist immer komplexer als ein einfacher Dateizugriff.
Einspruch. Wenn ich strukturierte Daten wie beispielsweise ein Adressbuch habe, kann es eine kleine Herausforderung sein, die Daten strukturiert in einer flachen Datei unterzubringen. Zumindest wenn man den Anspruch hat, es richtig zu machen.
Ich habe absichtlich "einfacher Dateizugriff" geschrieben. Und da unser werter confused_men noch keinerlei Datenbankabstraktionsschicht geschrieben hat, oder noch nicht mal sicher ist welche Schnittstelle er verwendet, muss ich davon ausgehen das es derzeit mehr Aufwand für ihn ist. Und ohne eine Abstraktionsschicht kann eine csv-Datei tatsächlich merklich einfacher sein.