加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

Using SQLite in C++ with Code::blocks

发布时间:2020-12-12 20:34:34 所属栏目:百科 来源:网络整理
导读:What you will need: -Basic C++ and SQL knowledge -SQLite (Download) Introduction SQLite is an embedded SQL database engine. Unlike most other SQL databases,SQLite does not have a separate server process,but instead reads and writes directl
1sqlite3 *database;2 sqlite3_open("Database.sqlite",&database);
The first argument is the filename,the second is the sqlite3 database handle.
If everything goes right,SQLITE_OKis returned.

Query's
Once the database is opened,you can actually start doing something. The following code shows how:
01 sqlite3_stmt *statement; 02 03if(sqlite3_prepare_v2(database,"CREATE TABLE a (b INTEGER,c INTEGER);"{ 05intcols = sqlite3_column_count(statement); 06 result = 0; 07 while(true) 08 09 result = sqlite3_step(statement); 10 11 (result == SQLITE_ROW) 12 13 for(col = 0; col < cols; col++) 14 15 string s = (char*)sqlite3_column_text(statement,col); 16//do something with it 17 } 18 } 19 else 20 21 break; 22 23 24 25 sqlite3_finalize(statement); 26 }
The first thing you have to do is prepare the statement using sqlite3_prepare_v2(),if everything goes right,0); font-family:monospace!important">SQLITE_OKwill be returned.
Then we actually have to execute the statement using sqlite3_step(). This function will return a value which we will need to determine our next action.
If the query is not supposed to return anything,like with CREATE TABLEand INSERT,we just have to finalize the statement using sqlite3_finalize()to avoid a memory leak. If the query returns colums of data,0); font-family:monospace!important">SELECT,the function will return SQLITE_ROW. If that happens,we will need read the data.
First we will need to know the amount of columns it has returned. We can do this using sqlite3_column_count(). Then all we have to do is request the columns using sqlite3_column_text().

Closing the database
Now all we have to do is close the database,so the data is saved.
sqlite3_close(database);

Examples

I have written the following class to make it some simpler:

#include "Database.h"
#include <iostream>

Database::Database(char* filename)
{  database = NULL;
   open(filename);
}

Database::~Database()
{
}

bool Database::open(char* filename)
{  if(sqlite3_open(filename,&database) == SQLITE_OK)
      return true;

   return false;
}

vector<vector<string> > Database::query(char* query)
{  sqlite3_stmt *statement;
   vector<vector<string> > results;

   if(sqlite3_prepare_v2(database,query,0) == SQLITE_OK)
   {  int cols = sqlite3_column_count(statement);
      int result = 0;
      while(true)
      {  result = sqlite3_step(statement);

         if(result == SQLITE_ROW)
         {  vector<string> values;
            for(int col = 0; col < cols; col++)
            {  std::string  val;
               char * ptr = (char*)sqlite3_column_text(statement,col);

               if(ptr)
               {  val = ptr;
               }
               else val = ""; // this can be commented out since std::string  val;
               // initialize variable 'val' to empty string anyway

               values.push_back(val);  // now we will never push NULL
            }
            results.push_back(values);
         }
         else
         {  break;
         }
      }

      sqlite3_finalize(statement);
   }

   string error = sqlite3_errmsg(database);
   if(error != "not an error") cout << query << " " << error << endl;

   return results;
}

void Database::close()
{  sqlite3_close(database);
}
Header:
view source print ? #ifndef __DATABASE_H__ #define __DATABASE_H__ #include <string> #include <vector> #include <sqlite3.h>usingnamespacestd; classDatabase { public: Database(* filename); ~Database(); boolopen(* filename); vector<vector<string> > query(* query); voidclose(); private}; #endif

And the following piece of code shows how to use it:

#include <iostream>
#include "Database.h"
using namespace std;

int main()
{  Database *db;
   db = new Database("Database.sqlite");
   db->query("CREATE TABLE a (a INTEGER,b INTEGER);");
   db->query("INSERT INTO a VALUES(1,2);");
   db->query("INSERT INTO a VALUES(5,4);");
   vector<vector<string> > result = db->query("SELECT a,b FROM a;");
   for(vector<vector<string> >::iterator it = result.begin(); it < result.end(); ++it)
   {  vector<string> row = *it;
      cout << "Values: (A=" << row.at(0) << ",B=" << row.at(1) << ")" << endl;
   }
   db->close();
}

http://www.dreamincode.net/forums/topic/122300-sqlite-in-c/

稍作修改

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

What you will need:
-Basic C++ and SQL knowledge
-SQLite (Download)

Introduction
SQLite is an embedded SQL database engine. Unlike most other SQL databases,SQLite does not have a separate server process,but instead reads and writes directly to ordinary disk files. This makes SQLite an easy and good solution to store data for your application.

Opening a database
The first thing you need to do,is open a database. If the database does not exist yet,it will be created.
    推荐文章
      热点阅读