TOP

Programmieren – Zeiger

Lösungsvorschläge für den Fragenkatalog von Prof. Stark im Fach Programmieren II – Technische Informatik an der Hochschule Augsburg.
(weiterlesen…)

Read More
TOP

Programmieren – Grundlagen

Lösungsvorschläge für den Fragenkatalog von Prof. Stark im Fach Programmieren II – Technische Informatik an der Hochschule Augsburg.
(weiterlesen…)

Read More
TOP

Oracle Berkeley DB unter Ubuntu

Berkeley DB ist eine Datenbank-Bibliothek für Linux, Windows, BSD UNIX, Solaris, Mac OS/X (…) und unterstützt diverse Programmiersprachen (C, C++, Java, Perl, Python, PHP, Tcl, Ruby, etc.). Berkeley DB wird von vielen Applikationen benutzt. Die mir darunter bekanntesten sind: KDevelop, Postfix und Subversion [1].

Die Installation hat mir einige Probleme bereitet, deshalb möchte ich hier kurz erläutern, wie man sich die aktuelle Version unter Linux (Ubuntu 9.04) installiert und ein Programm kompiliert. Diese Anleitung ist nur als Einstieg gedacht. Man sollte auf jeden Fall auch noch die Dokumentation von Oracle lesen. Es gibt für einige Programmiersprachen noch ausführliche Anleitungen, wie man die Datenbank in das eigene Programm einbinden kann [2].

Zuerst läd man sich die passende Version von der Oracle Homepage herunter: http://www.oracle.com/technology/software/products/berkeley-db/index.html in meinem Fall war das Berkeley DB 4.7.25.tar.gz, with AES encryption (13M)
Dann muss diese Datei entpackt werden:

tar xfvz db-4.7.25.tar.gz

nun wechselt man in das Verzeichnis db-4.7.25/build_unix konfiguriert, kompiliert und installiert die Bibliothek mit

cd db-4.7.25/build_unix
../dist/configure --enable-cxx
make -j
sudo make install

Was jetzt noch wichtig ist, ist dem Linker mit zuteilen, wo er die neue Bibliothek finden kann. Dafür sucht man in der Installationsausgabe die Zeile Libraries have been installed in: /usr/local/BerkeleyDB.4.7/lib und kopiert den Pfad.
Anschließend öffnet man mit einem beliebigen Editor (in meinem Fall vi) die Datei /etc/ld.so.conf:

sudo vi /etc/ld.so.conf

und fügt den Pfad ein. Sobald man den Linker aktualisiert hat ist die Installation abgeschlossen:

sudo ldconfig

Nun erstellen wir schnell ein erstes Programm:
Noch ein kurzes Wort zur Warnung: Das folgende Programm ist nicht vollständig. Normalerweise würde man erstens ein eher objektorientiertes Konzept wählen (eine eigene Klasse erstellen). Außerdem sind Fehler noch nicht abgefangen. Diese Dinge habe ich der Übersicht halber weggelassen.

#include <cstring>
#include <db_cxx.h>
 
#define BUF 100
 
int main()
{
    Db db(NULL,0);
    db.open(NULL,       // Transaction Pointer
            "my_db.db", // Dateiname der neuen Datenbank
            NULL,       // Optionaler logischer Datenbank Name
            DB_BTREE,   // Datenbank Zugriffsmethode
            DB_CREATE,  // Flags
            0);         // Datei Modus 0 = default
 
    // Dinge die wird in die Datenbank speichern möchten
    float money = 123.45;
    char describtion[BUF] = "HelloWorld" ;
 
    // Erstelle Objekte
    Dbt key( &money, sizeof(float) );
    Dbt data( &describtion, BUF );
 
    // Eintragen in die Datenbank - Duplikate nicht überschreiben
    int ret = db.put(NULL, &key, &data, DB_NOOVERWRITE );
    if( ret == DB_KEYEXIST )
    {
        std::cout < < "Schlüssel exisitert bereits" << std::endl;
    }
 
    db.sync(0); // Syncronisiere Datenbank (schreibe in Datei)
 
    // Erstelle Objekte für die Suche
    Dbt searchKey, searchData;
 
    float searchTerm = 123.45; // Suchterm - der gleiche wie oben
 
    // Setze Attribute für Suchobjekt
    searchKey.set_size( sizeof(float) );
    searchKey.set_data( &searchTerm );
 
    // Puffer für das Ergebnis
    char result[BUF];
 
    searchData.set_data( result );
    searchData.set_ulen(BUF+1); // Größe des benutzerspez. Buffers
    searchData.set_flags(DB_DBT_USERMEM);
 
    // Eigentliche Suche
    ret = db.get(NULL, &searchKey, &searchData, 0);
 
    if( ret == DB_NOTFOUND )
    {
        std::cout << "nicht gefunden" << std::endl;
    }
    else
    {
        std::cout << "gefunden: " <<  result << std::endl;
    }
}

Das ganze wird nun kompiliert und schon hat man seine erste Berkeley DB Anwendung.
g++ main.cpp -o dbApp -ldb_cxx-4.7 -I /usr/local/BerkeleyDB.4.7/include/ -L /usr/local/BerkeleyDB.4.7/lib/

Links:

Weiterführende Literatur (Amazon):

Read More