//for insert key and data (main)
#include <sys/types.h>
#include <errno.h>
#include <iostream>
#include <stddef.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <EnvTest.h>
#include <db_cxx.h>
/* include environtmenCreate class */
using std::ostream;
using std::cout;
using std::cerr;
/*constructors for create path and database name */
EnvironmentCreate::EnvironmentCreate( std::string& pathCreate,
std::string& databaseName,
const char *valuePrograms_ ,
bool isSecondary )
:pathDbFileName_( pathCreate+databaseName ),
programs_( valuePrograms_ ),
databaseDBObject_(NULL,0),
keySet_(NULL,0),
valueSet_(NULL,0),
cFlags_( DB_CREATE )
{
/*exception for handle open database*/
try
{
/*error database,check help handle database support */
databaseDBObject_.set_error_stream( &std::cerr );
/*sort deuplicates,if this is a secondary database*/
if( isSecondary )
{
databaseDBObject_.set_flags( DB_DUPSORT );
}
/*open database*/
databaseDBObject_.open( NULL, pathDbFileName_.c_str( ), NULL, DB_BTREE, cFlags_, 0 );
}
catch( DbException &exception )
{
std::cout<<"-------------------------------------------------"<<"\n";
std::cout<<"Error open database "<<pathDbFileName_<<"\n";
std::cerr<<exception.what()<<std::endl;
std::cout<<"-------------------------------------------------"<<"\n";
}
catch( std::exception &exception )
{
std::cout<<"-------------------------------------------------"<<"\n";
std::cout<<"Error open database "<<pathDbFileName_<<"\n";
std::cerr<<exception.what()<<std::endl;
std::cout<<"-------------------------------------------------"<<"\n";
}
};
/* constructor */
EnvironmentCreate::EnvironmentCreate()
:databaseDBObject_(NULL,0),
keySet_(NULL,0),
valueSet_(NULL,0){};
/* close database memberfion define */
void EnvironmentCreate::close()
{
//handle close database;
try
{
std::cout<<"-------------------------------------------------"<<"\n";
databaseDBObject_.close( 0 );
std::cout<<"Database close "<< databaseName_ <<"\n";
std::cout<<" closed() "<<std::endl;
std::cout<<"-------------------------------------------------"<<"\n";
}
catch( DbException &dbHandle )
{
std::cout<<"-------------------------------------------------"<<"\n";
std::cerr<<" Error closing database "<< databaseName_ <<"\n";
std::cerr<< dbHandle.what() <<std::endl;
std::cout<<"-------------------------------------------------"<<"\n";
}
catch( std::exception &exception )
{
std::cout<<"-------------------------------------------------"<<"\n";
std::cout<<"Error close databse "<<pathDbFileName_<<"\n";
std::cerr<<exception.what()<<std::endl;
std::cout<<"-------------------------------------------------"<<"\n";
}
}
/* define insertDatabase
* return ture,if can insert data */
bool EnvironmentCreate::insertDatabase( char *keyInsert,
char *valueInsert,
const EnvironmentCreate& environmentDatabasePathName )
{
/*for handle insert data to database file */
try
{
/*set path name */
std::string pathSetOpen = environmentDatabasePathName.pathDbFileName_;
std::cout<<"Print path name : "<<pathSetOpen<<std::endl;
/* Error checking */
databaseDBObject_.set_errpfx( " Error on insertDatabase data member " );
// /* open database */
// databaseDBObject_.open(NULL,
// environmentDatabasePathName.pathDbFileName_.c_str( ),
// NULL,
// DB_BTREE,
// cFlags_,
// 0644);
/*
* author Chatsiri.rat
*
* set key value length
*/
u_int32_t key_len = ( u_int32_t )strlen( keyInsert );
/*
* author Chatsiri.rat
*
* set data value length
*/
u_int32_t value_len = ( u_int32_t )strlen( valueInsert );
/*
* author Chatsiri.rat
* Dbt for set key and value
*/
Dbt keySet_( keyInsert, key_len + 1 );
//setDbt( &keyInsert, key_len );
Dbt valueSet_( valueInsert, value_len + 1 );
/*
* author Chatsiri.rat
* variable for check error key exist
*/
int ret = databaseDBObject_.put( 0, & keySet_ , &valueSet_, DB_NOOVERWRITE );
if( ret = DB_KEYEXIST )
{
databaseDBObject_.err( ret, " " );
}
/*
* author Chatsiri.rat
* Store value
*/
Dbt storeValue_;
ret = databaseDBObject_.get( 0, &keySet_, &storeValue_, 0 );
std::cout<<"StroeValue_ : "<<( char * )storeValue_.get_data()<<std::endl;
databaseDBObject_.close(0);
}
catch( DbException &dbex )
{
databaseDBObject_.err( dbex.get_errno(), "DB exception caught " );
}
}
int main()
{
std::string pathSet = "/home/Chatsiri.rat/databasedb/";
std::string nameSet = "database023";
EnvironmentCreate environ( pathSet, nameSet,"programs",false );
/*
* author Chatsiri.rat
* insert key and data in databases;
*/
char * valueKey = "test";
char * valueInsert = "chatsiri";
environ.insertDatabase( valueKey, valueInsert, environ);
}