Click here to Skip to main content
Click here to Skip to main content

Another Embedded Database For C++

By , 13 Jan 2007
 

Introduction

Here is another wrapper for the famous SQLite database engine. Yes, I know about CppSQLite. It is an excellent wrapper for SQLite. I do not claim my code is superior to CppSQLite in some way. But if you already know the JDBC API, then you will find my library really easy and straightforward to use.

Using the code

Let us jump right into some example snippets that will help you start using the classes right away. To create or open a database, use the Connection class' open() function.

Connection conn;
conn.open("mydb"); // the argument is the database name.

To execute SQL commands, get a handle to the Statement object. Call the execute() function to execute all SQL commands except SELECT. The execute() function will return the number of rows affected by the query.

Statement* stmt = conn.createStatement();
stmt->execute("create table albums(title,artist)"); // creates a table
stmt->execute(
 "insert into albums values('Brothers in Arms','Dire Straits')");
    // insert some data
stmt->execute("insert into albums values('Unplugged','Eric Clapton')");

To execute a SELECT statement, use the executeQuery() function. This function returns a handle to a ResultSet. use the next() function to navigate through the ResultSet. The ResultSet class has a number of getXXX() functions that take the number of the column as it's argument and return that column's value as the specified type. The different getXXX() functions are:

  • std::string getString(int colNum)
  • int getInt(int colNum)
  • long getLong(int colNum)
  • unsigned int getUInt(int colNum)
  • unsigned long getULong(int colNum)
  • float getFloat(int colNum)
  • double getDouble(int colNum)
  • bool getBoolean(int colNum)

The ResultSet has an object of ResultSetMetaData embedded with in it. We can get a handle to this object with a call to getMetaData(). The ResultSetMetaData contains information like the number of columns in the ResultSet, their names and data types.

ResultSet* rslt = stmt->executeQuery("select * from albums");
ResultSetMetaData* r_mtdt = rslt->getMetaData();
int cols = r_mtdt->getColumnCount();
while(rslt->next()) {
  for(int i=0;i<cols;i++) {
    printf("%s (%s): %s  ",r_mtdt->getColumnName(i+1).c_str(),
    r_mtdt->getColumnType(i+1).c_str(),rslt->getString(i+1).c_str());
  }
  printf("\n");
}

The DatabaseMetaData class contains the meta data of the entire database. We can obtain a DatabaseMetaData handle by calling the getDatabaseMetaData() function of the Connection class.

Call the refreshMetaData() function first, if you want the latest database meta data.

conn.refreshMetaData();
if(conn.getDatabaseMetaData()->doesObjectExist("albums","table")) 
    // check to see if a table exists
  stmt->execute("drop table albums");// delete it if it exists

The DatabaseMetaData contains the following information:

  • Number of objects in the database.
  • Name of each object
  • Type of each object (table,index)

We can use the doesObjectExist() function to check if an object exists in the database. The first argument of this function is the name of the object and the second argument is it's type. This can be either "table" or "index".

Points of Interest

  1. To use this library, include the header file dsqlxprez_2.h and link your project with sqlite3.lib
  2. Always enclose database calls in a try - catch block that catches a SQLException
  3. All the classes in the library falls in a namespace called dsqlxprez. (DSQL stands for DarkSide SQL. Just a name, that's' it !!)
  4. You do not have to call the close() function on the Connection object explicitly. All resources are automatically deleted by the library when the Connection object's destructor is executed.

History

  • Created July 26, 2004.
  • Updated downloads Jan 14, 2007

License

This article, along with any associated source code and files, is licensed under The BSD License

About the Author

AnOldGreenHorn
India India
Member
No Biography provided

Sign Up to vote   Poor Excellent
Add a reason or comment to your vote: x
Votes of 3 or less require a comment

Comments and Discussions

 
Hint: For improved responsiveness ensure Javascript is enabled and choose 'Normal' from the Layout dropdown and hit 'Update'.
You must Sign In to use this message board.
Search this forum  
    Spacing  Noise  Layout  Per page   
GeneralThank you !memberMemocs24 Jun '07 - 16:46 
QuestionSQLITE3.DLLmemberusf_azi9 Feb '07 - 8:03 
GeneralI prefer Rob Groves version...memberAaron Planell16 Jan '07 - 21:40 
GeneralRe: I prefer Rob Groves version...membershiftedbitmonkey5 Jan '09 - 13:43 
GeneralSlow insert fast selectmemberGVR197912 Jan '07 - 4:03 
hello, how can I insert fast,I need 30seconds for 76records :<
I use execute
stmt->execute( );
 
select works very good
 
thx
GeneralRe: Slow insert fast selectmemberislobodan14 Jan '07 - 8:54 
Generallast_insert_rowidmemberGVR197910 Jan '07 - 6:55 
GeneralRe: last_insert_rowidmemberVijay Mathew Pandyalakal11 Jan '07 - 0:41 
GeneralRe: last_insert_rowidmemberGVR197912 Jan '07 - 4:54 
GeneralRe: last_insert_rowidmemberVijay Mathew Pandyalakal15 Jan '07 - 16:57 
Generalsqlite3.dll and sqlite3.lib for vc++ 6.0memberThai Duong Nguyen3 Jan '07 - 17:54 
GeneralRe: sqlite3.dll and sqlite3.lib for vc++ 6.0memberVijay Mathew Pandyalakal4 Jan '07 - 17:18 
GeneralRe: sqlite3.dll and sqlite3.lib for vc++ 6.0memberAaron Planell16 Jan '07 - 21:43 
Generalwww.sqlite.org, PleasesitebuilderUwe Keim2 Jan '07 - 21:58 
GeneralRe: www.sqlite.org, PleasememberVijay Mathew Pandyalakal3 Jan '07 - 17:19 
QuestionWhat has changed ...memberHans Dietrich2 Jan '07 - 18:29 
AnswerRe: What has changed ...memberVijay Mathew Pandyalakal3 Jan '07 - 17:13 
GeneralMemory Leakmemberjbay10130 Dec '06 - 18:52 
GeneralRe: Memory LeakmemberVijay Mathew Pandyalakal1 Jan '07 - 19:33 
Generalwindows mobilememberGVR197929 Nov '06 - 11:08 
GeneralRe: windows mobilememberVijay Mathew Pandyalakal29 Nov '06 - 16:53 
GeneralRe: windows mobilememberGVR197930 Nov '06 - 3:43 
GeneralRe: windows mobilememberVijay Mathew Pandyalakal30 Nov '06 - 17:11 
QuestionLicense?memberSceptic Mole14 Nov '06 - 10:42 
AnswerRe: License?memberVijay Mathew Pandyalakal14 Nov '06 - 17:45 
Generalerror in sqlite - ISO C++ forbids declaration of `open' with no typemembersultan_sk13 Nov '06 - 3:07 
GeneralRe: error in sqlite - ISO C++ forbids declaration of `open' with no typememberVijay Mathew Pandyalakal13 Nov '06 - 18:36 
GeneralUnicodemembergillnrb19 May '06 - 4:17 
GeneralRe: UnicodememberAaron Planell16 Jan '07 - 21:43 
GeneralVery good Job!memberILikeThisSite16 Mar '06 - 2:52 
GeneralRe: Very good Job!memberVijay Mathew Pandyalakal16 Mar '06 - 15:49 
QuestionError compiling in devcpp?memberthe12be24 Jul '05 - 11:19 
AnswerRe: Error compiling in devcpp?memberVijay Mathew Pandyalakal24 Jul '05 - 18:49 
GeneralCompiling using Devcppmembermdr216 May '05 - 15:05 
GeneralRe: Compiling using DevcppmemberVijay Mathew Pandyalakal16 May '05 - 17:46 
GeneralExcellent WorksussCleve Blakemore24 Feb '05 - 15:02 
Generalusing in C#memberkadnan15 Jan '05 - 6:01 
GeneralRe: using in C#memberVijay Mathew Pandyalakal26 Jan '05 - 18:32 
AnswerRe: using in C#memberSteffen Lange4 Jan '07 - 23:40 
Questionhow to insert a variablememberaqndyggg15 Nov '04 - 12:01 
AnswerRe: how to insert a variablememberVijay Mathew Pandyalakal15 Nov '04 - 16:51 
GeneralRe: how to insert a variablememberaqndyggg16 Nov '04 - 2:00 
GeneralWhich SQLite paltform 2.8.15 or 3.0.8memberSharad Kelkar6 Nov '04 - 18:34 
GeneralRe: Which SQLite paltform 2.8.15 or 3.0.8memberVijay Mathew Pandyalakal7 Nov '04 - 16:47 
GeneralRe: Which SQLite paltform 2.8.15 or 3.0.8memberSharad Kelkar7 Nov '04 - 18:39 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Rant Rant    Admin Admin   

Permalink | Advertise | Privacy | Mobile
Web03 | 2.6.130516.1 | Last Updated 14 Jan 2007
Article Copyright 2004 by AnOldGreenHorn
Everything else Copyright © CodeProject, 1999-2013
Terms of Use
Layout: fixed | fluid