Suche die Datenbank die zu mir passt
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Suche die Datenbank die zu mir passt
Weiß jetzt nicht so recht, ob dass das richtige Forum dafür ist, aber notfalls kann man ja verschieben
Also ich noch unter Delphi programmiert habe, war ich eigentlich hauptsächlich mit Datenbanken am Arbeiten, z. B. für ein ganz einfaches Bibliotheksprogramm für die Schülerbibliothek. Es war sehr einfach gestrickt, aber damals habe ich hauptsächlich mit der Paradox Datenbank mit der Borland BDE gearbeitet.
So was ähnliches suche ich jetzt für C/C++. Welche Datenbank könnt ihr mir empfehlen, für eine Anwendung, die nur lokal auf einem Rechner liegt, also keine Webbasierung oder Zugriff über Netzwerk (Wenn die Möglichkeiten trotzdem vorhanden sind, nicht weiter schlimme müsste ich mich halt nichtmehr umstellen, wenn ich es doch mal brauchen sollte). Es müssen keine riesigen Datenmengen verwaltet werden und die Datenbankfelder sind vorher bekannt und müssen selten bis gar nicht dynamisch erweitert werden. Suchdurchläufe sind dagegen wieder recht häufig zu erwarten sowie die Verknüpfung von zwei voneinander abhängigen Datenbanken z. B. über Schlüsselpaare oder einfach nur ID Nummern. Also im Grunde eine mehrzeilige Liste (ob das der richtige Ausdruck dafür ist? )
Außerdem muss sie folgende Vorraussetzungen erfüllen:
Keine zusätzlich Software muss installiert werden, die Datenbank lässt sich vollständig ins Programm einbetten.
Sie soll nichts kosten, das Programm wird nicht gewinnbringend sein, am liebsten OpenSource.
Die Datenbank lässt sich im Rahmen der Programminstallation vollständig aus Programmcode erstellen um die Installationsdatei möglichst klein zu halten(Programm wird per Email versandt).
Kennt ihr etwas, was meinen Anforderungen entspricht?
Edit: Hab noch eine wichtige Anforderung vergessen: Sie muss plattformübergreifend funktionieren
Also ich noch unter Delphi programmiert habe, war ich eigentlich hauptsächlich mit Datenbanken am Arbeiten, z. B. für ein ganz einfaches Bibliotheksprogramm für die Schülerbibliothek. Es war sehr einfach gestrickt, aber damals habe ich hauptsächlich mit der Paradox Datenbank mit der Borland BDE gearbeitet.
So was ähnliches suche ich jetzt für C/C++. Welche Datenbank könnt ihr mir empfehlen, für eine Anwendung, die nur lokal auf einem Rechner liegt, also keine Webbasierung oder Zugriff über Netzwerk (Wenn die Möglichkeiten trotzdem vorhanden sind, nicht weiter schlimme müsste ich mich halt nichtmehr umstellen, wenn ich es doch mal brauchen sollte). Es müssen keine riesigen Datenmengen verwaltet werden und die Datenbankfelder sind vorher bekannt und müssen selten bis gar nicht dynamisch erweitert werden. Suchdurchläufe sind dagegen wieder recht häufig zu erwarten sowie die Verknüpfung von zwei voneinander abhängigen Datenbanken z. B. über Schlüsselpaare oder einfach nur ID Nummern. Also im Grunde eine mehrzeilige Liste (ob das der richtige Ausdruck dafür ist? )
Außerdem muss sie folgende Vorraussetzungen erfüllen:
Keine zusätzlich Software muss installiert werden, die Datenbank lässt sich vollständig ins Programm einbetten.
Sie soll nichts kosten, das Programm wird nicht gewinnbringend sein, am liebsten OpenSource.
Die Datenbank lässt sich im Rahmen der Programminstallation vollständig aus Programmcode erstellen um die Installationsdatei möglichst klein zu halten(Programm wird per Email versandt).
Kennt ihr etwas, was meinen Anforderungen entspricht?
Edit: Hab noch eine wichtige Anforderung vergessen: Sie muss plattformübergreifend funktionieren
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Suche die Datenbank die zu mir passt
Ich glaube SQLlite erfüllt Deine Anforderungen. Bin mir aber nicht sicher - da ich da auch noch nicht mit hantiert habe.
Könnte aber schonmal ein Google-Stichwort sein. ^
Könnte aber schonmal ein Google-Stichwort sein. ^
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Re: Suche die Datenbank die zu mir passt
Danke Xin, das sieht doch schon mal sehr gut aus. Wieder was, wo ich mich reinlesen kann ^^
Aber auf den ersten Blick scheint es genau das zu sein, was ich suche. Mal sehen, wie leicht sich das ganze in ein Windowsprogramm integrieren lässt...
Aber auf den ersten Blick scheint es genau das zu sein, was ich suche. Mal sehen, wie leicht sich das ganze in ein Windowsprogramm integrieren lässt...
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
Re: Suche die Datenbank die zu mir passt
XML ist ja eigentlich kein Datenbanksystem, aber eignet sich meiner Meinung auch um Daten darzustellen. Einfach einzubetten ist es allemale und Suchanfragen lassen sich per XQuery einfach gestalten. Ich ziehe das menschenlesbare XML eigentlich einer binär gespeicherten Datenbank vor (die man ja nur schwer per Hand aus der Datei rauslesen kann).
Physics is like sex: sure, it may give some practical result, but that's not why we do it.
(Richard P. Feynman)
(Richard P. Feynman)
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Suche die Datenbank die zu mir passt
Wenn Du Dich einliest, kannst Du das ganze auch mal hier vorstellen?Bebu hat geschrieben:Danke Xin, das sieht doch schon mal sehr gut aus. Wieder was, wo ich mich reinlesen kann ^^
Aber auf den ersten Blick scheint es genau das zu sein, was ich suche. Mal sehen, wie leicht sich das ganze in ein Windowsprogramm integrieren lässt...
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Re: Suche die Datenbank die zu mir passt
Kann ich mir auch mal ansehen, wie ist es denn bei XML mit Eintragsindizierung und Suchanfragen in den Daten?AnGaiNoR hat geschrieben:XML ist ja eigentlich kein Datenbanksystem, aber eignet sich meiner Meinung auch um Daten darzustellen. Einfach einzubetten ist es allemale und Suchanfragen lassen sich per XQuery einfach gestalten. Ich ziehe das menschenlesbare XML eigentlich einer binär gespeicherten Datenbank vor (die man ja nur schwer per Hand aus der Datei rauslesen kann).
Ich kann es mal versuchen^^ Die Dokus die ich bisher gefunden habe, war das meiset auf Englisch, das bringt mich zwar nicht um, aber dafür brauche ich dann wesentlich länger, so sicher bin ich da leider nicht. Aber ich kann es ja mal ins Auge fassenXin hat geschrieben:Wenn Du Dich einliest, kannst Du das ganze auch mal hier vorstellen?
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Suche die Datenbank die zu mir passt
Darum wäre es ja schön, etwas auf Deutsch zu haben ^Bebu hat geschrieben:Ich kann es mal versuchen^^ Die Dokus die ich bisher gefunden habe, war das meiset auf Englisch, das bringt mich zwar nicht um, aber dafür brauche ich dann wesentlich länger, so sicher bin ich da leider nicht. Aber ich kann es ja mal ins Auge fassenXin hat geschrieben:Wenn Du Dich einliest, kannst Du das ganze auch mal hier vorstellen?
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Re: Suche die Datenbank die zu mir passt
Ich hab das unlängst auch einmal verwendet und dazu eine kleine C++ Wrapperklasse geschrieben:
Für die Abfragen und das Erstellen der Tabellen kannst du eh normales bzw. etwas eingeschränktes SQL verwenden. Es gibt zb was ich weiß nur INTEGER, TEXT, REAL und BLOB als Datentyp, aber das schaust du am Besten direkt in der Dokumentation nach.
Eine Tabelle kannst du zb mit "sqlite3 messages.db < schema.sql" aus der Kommandozeile erzeugen. Wenn die schema.sql wie folgt ausschaut:
dann kannst du mit folgendem Code etwas einfügen und nachher die gesamte Tabelle ausgeben lassen:
Code: Alles auswählen
//------------------------------------------------------------------------------
// sqlite_cpp.hpp
// (c) copyright 2009 Thomas Geymayer <tomgey@gmail.com>
//------------------------------------------------------------------------------
/*!
* @file
* @brief
* @details
* @author Thomas Geymayer <tomgey@gmail.com>
* @date Date of Creation: 24.10.2009
*/
#ifndef SQLITE_CPP_HPP_
#define SQLITE_CPP_HPP_
#include <string>
#include <sqlite3.h>
#include <stdexcept>
#include <vector>
#include <map>
class SQLite
{
public:
typedef std::map<std::string,std::string> Row;
typedef std::vector<Row> Result;
//--------------------------------------------------------------------------
SQLite( const std::string& dbase )
{
checkCall( sqlite3_open(dbase.c_str(), &_db) );
}
//--------------------------------------------------------------------------
~SQLite()
{
sqlite3_close(_db);
}
//--------------------------------------------------------------------------
Result query( const std::string& query )
{
//std::cout << query << std::endl;
sqlite3_stmt *stmt;
checkCall( sqlite3_prepare_v2(_db, query.c_str(), query.size(), &stmt, 0) );
int cols = sqlite3_column_count(stmt);
Result result;
while( sqlite3_step(stmt) == SQLITE_ROW )
{
Row cur_row;
for( int i = 0; i < cols; ++i )
{
if( !sqlite3_column_name(stmt,i) )
continue;
std::string name( sqlite3_column_name(stmt,i) );
if( name.empty() )
continue;
std::string value;
if( sqlite3_column_text(stmt,i) )
value = reinterpret_cast<const char*>(sqlite3_column_text(stmt,i));
cur_row[ name ] = value;
}
result.push_back(cur_row);
}
sqlite3_finalize(stmt);
return result;
}
//--------------------------------------------------------------------------
void insert( const std::string& table,
const Row& values )
{
std::string col_names, col_values;
for( Row::const_iterator col = values.begin();
col != values.end();
++col )
{
if( !col_names.empty() )
{
col_names += ",";
col_values += ",";
}
col_names += "`" + col->first + "`";
col_values += "'" + col->second + "'";
}
query( "INSERT INTO " + table
+ " (" + col_names + ") VALUES (" + col_values + ")" );
}
//--------------------------------------------------------------------------
Result select( const std::string& table,
const Row& values )
{
std::string checks;
for( Row::const_iterator col = values.begin();
col != values.end();
++col )
{
if( !checks.empty() )
checks += " and ";
checks += "`" + col->first + "`='" + col->second + "'";
}
return query( "SELECT * FROM " + table + " WHERE " + checks );
}
//--------------------------------------------------------------------------
void update( const std::string& table,
const Row& values,
const std::string& where )
{
std::string sets;
for( Row::const_iterator col = values.begin();
col != values.end();
++col )
{
if( !sets.empty() )
sets += ',';
sets += "`" + col->first + "`='" + col->second + "'";
}
query( "UPDATE " + table + " SET " + sets + " WHERE " + where );
}
//--------------------------------------------------------------------------
void deleteFrom( const std::string& table,
const Row& checks,
const std::string& id_col )
{
Result values = select(table, checks);
for( Result::const_iterator row = values.begin();
row != values.end();
++row )
{
query( "DELETE FROM " + table
+ " WHERE `" + id_col + "`='" + row->at(id_col) + "'" );
}
}
private:
void checkCall( int retval )
{
if( retval != SQLITE_OK )
throw std::runtime_error( sqlite3_errmsg(_db) );
}
sqlite3* _db;
};
#endif /* SQLITE_CPP_HPP_ */
Eine Tabelle kannst du zb mit "sqlite3 messages.db < schema.sql" aus der Kommandozeile erzeugen. Wenn die schema.sql wie folgt ausschaut:
Code: Alles auswählen
DROP TABLE IF EXISTS messages;
CREATE TABLE messages(
id INTEGER PRIMARY KEY AUTOINCREMENT,
inserted INTEGER NOT NULL DEFAULT 0,
message_sent INTEGER NOT NULL DEFAULT 0,
type TEXT,
host TEXT,
service TEXT,
state TEXT,
duration TEXT,
email TEXT
);
Code: Alles auswählen
int main(int argc, char* argv[])
{
// open the database
SQLite db("messages.db");
// create new entry
SQLite::Row input;
input["type" ] = argv[2];
input["host" ] = argv[3];
input["service" ] = argv[4];
input["state" ] = argv[5];
input["duration" ] = argv[6];
input["email" ] = argv[7];
std::cout << "Inserting new notification..." << std::endl;
db.insert("messages", input);
// print out the database
SQLite::Result result = db.query("select * from messages");
for( SQLite::Result::iterator row = result.begin();
row != result.end();
++row )
{
std::cout << "-----------------------------------------------------------"
<< "---------------------" << std::endl;
std::cout << row->at("id") << "|"
<< row->at("type") << "|"
<< row->at("host") << "|"
<< row->at("service") << "|"
<< row->at("state") << "|"
<< row->at("duration")<< "|"
<< row->at("inserted")<< "|"
<< row->at("message_sent")
<< std::endl;
}
return 0;
}
"Make it idiot-proof and someone will invent an even better idiot." (programmers wisdom)
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
OpenGL Tutorials und vieles mehr rund ums Programmieren: http://www.tomprogs.at
- Xin
- nur zu Besuch hier
- Beiträge: 8859
- Registriert: Fr Jul 04, 2008 11:10 pm
- Wohnort: /home/xin
- Kontaktdaten:
Re: Suche die Datenbank die zu mir passt
Hey, Kerli...
Pack sowas doch ins Wiki!
Sowas geht doch im Forum einfach unter und dann findet es wieder keiner!
Pack sowas doch ins Wiki!
Sowas geht doch im Forum einfach unter und dann findet es wieder keiner!
Merke: Wer Ordnung hellt ist nicht zwangsläufig eine Leuchte.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
Ich beantworte keine generellen Programmierfragen per PN oder Mail. Dafür ist das Forum da.
- Bebu
- Beiträge: 562
- Registriert: Mi Okt 21, 2009 6:19 pm
- Wohnort: In der Nähe von Salzburg - Bin aber kein Österreicher!
Re: Suche die Datenbank die zu mir passt
Hui, bin grade ganz erschlagen von meiner Unwissenheit Kerli
Deine Klasse muss ich mir mal ganz in Ruhe ansehen, mein Wissen über Klassen ist wohl noch seeeeeehhhhhrrrrr ausbaufähig.
Aber trotzdem danke dafür, ich denke das wird mir noch sehr nützlich sein.
Deine Klasse muss ich mir mal ganz in Ruhe ansehen, mein Wissen über Klassen ist wohl noch seeeeeehhhhhrrrrr ausbaufähig.
Aber trotzdem danke dafür, ich denke das wird mir noch sehr nützlich sein.
Wer immer nach dem Unerreichbaren jagt, der wird irgendwann auf die Schnauze fallen!