codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
/*main() EnvTest */ /* base int main() */ #include <sys/types.h> #include <iterator> #include <algorithm> #include <iostream> #include <iomanip> #include <errno.h> #include <stdlib.h> //include file #include "EnvTest.h" #include "retiveDatabase.h" #include <errno.h> #include <stdio.h> #include <string.h> #include <db_cxx.h> #include <cstdlib> #include <fstream> #ifdef _WIN32 extern "C" { extern int getopt(int, char * const *, const char *); extern char *optarg; } #else #include <unistd.h> #endif /* include environtmenCreate class */ using std::ostream; using std::cout; using std::cerr; //forward declarations int show_item(EnvironmentCreate &itemnameSDB,EnvironmentCreate &vendorDB, std::string &itemName); int show_vendor(EnvironmentCreate &vendorDB,const char *vendor); /*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 Environment "<<pathDbFileName_<<"\n"; std::cerr<<exception.what()<<std::endl; std::cout<<"-------------------------------------------------"<<"\n"; } catch( std::exception &exception ) { std::cout<<"-------------------------------------------------"<<"\n"; std::cout<<"Error open database Environment "<<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 closing 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; databaseDBObject_.open( NULL, pathDbFileName_.c_str( ), NULL, DB_BTREE, cFlags_, 0 ); /* Error checking */ databaseDBObject_.set_errpfx( " Error on insertDatabase data member \n" ); /* * 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); return true; } catch( DbException &dbex ) { std::cout<<"------------------------------------------------------"<<std::endl; databaseDBObject_.err( dbex.get_errno(), "DB exception caught (insertDatabase)\n" ); std::cout<<"------------------------------------------------------"<<std::endl; return false; } } int main(int argc, char *argv[]) { std::string valuePath = "/home/Chatsiri.rat/databasedb/"; std::string valueDBName = "filename_" ; std::string itemnameSDB = "itemname.sdb"; const char *_valueProgramsSet = "programsDatabase"; //MyDb myDbCreate( valuePath, valueDBName, false ); EnvironmentCreate myDbCreate( valuePath, valueDBName, _valueProgramsSet, false ); char *_valueKey = "keyData1"; char *_valueData = "Chatsiri.rat"; std::string valueShow("keyData1"); EnvironmentCreate myDbInsert2; //insert data myDbInsert2.insertDatabase( _valueKey, _valueData, myDbCreate); //create path for read database file std::string databaseHome("./"); std::string itemName("c:/tmp/database/"); std::string valueDatabase("filename"); try{ EnvironmentCreate buffVendor( databaseHome, valueDBName, _valueProgramsSet); EnvironmentCreate buffRetiveSDB( databaseHome, itemnameSDB, _valueProgramsSet,true); //Associate secondrary to the primary buffVendor.getDb().associate(NULL, &(buffRetiveSDB.getDb()), get_item_name, 0); show_item( buffRetiveSDB, buffVendor, valueShow ); show_vendor( buffVendor, _valueKey ); } catch(DbException &e) { std::cerr<<"Error read database "<<std::endl; return ( e.get_errno() ); } catch(std::exception &e) { std::cerr<<e.what()<<std::endl; return (-1); } } /*set for show value */ int show_item(EnvironmentCreate &itemnameSDB, EnvironmentCreate &vendorDB, std::string &itemName ) { //create cursor Dbc *cursorPointer; try{ itemnameSDB.getDb().cursor( NULL, &cursorPointer, 0 ); std::cout<<"Look for "<< itemName<<std::endl; Dbt key( (void*)itemName.c_str(), (u_int32_t)itemName.length() + 1 ); Dbt data; //return 0 value if it have data int ret = cursorPointer->get(&key,&data,DB_SET); if( !ret ) { do { BufferRetive bufferRet(data.get_data()); bufferRet.show(); }while( cursorPointer->get(&key, &data, DB_SET ) == 0 ); } else { std::cerr<<"Not record : "<<itemName<<std::endl; } } catch(DbException &e ) { itemnameSDB.getDb().err( e.get_errno(), "Error in show_item "); cursorPointer->close(); throw e; } catch(std::exception &e ) { itemnameSDB.getDb().errx(" Erorr is show_item %s",e.what()); cursorPointer->close(); throw e; } cursorPointer->close(); return (0); } int show_vendor(EnvironmentCreate &vendorDB,const char *vendor ) { Dbt data; VENDOR my_vendorStruct; try { Dbt key((char *)vendor, (u_int32_t)strlen(vendor) + 1 ); data.set_data(&my_vendorStruct); data.set_ulen(sizeof(VENDOR)); data.set_flags(DB_DBT_USERMEM); vendorDB.getDb().get(NULL,&key,&data,0); std::cout<<" "<<my_vendorStruct.name<< " "<<std::endl; } catch(DbException &e) { vendorDB.getDb().err(e.get_errno(),"Error show vendor " ); throw e; } catch(std::exception &e) { throw e; } return (0); }
Private
[
?
]
Run code