#include <sqlite3.h> #include <string.h> #include <stdio.h> #include <iostream> #include <string> #include <vector> using namespace std; class Sqlite { private: sqlite3 *mdb; string mdbname; sqlite3_stmt *stmt; vector<string> mRow; bool classCheckFlag; public: Sqlite(string adbname) { int rc; classCheckFlag = false; mdbname = adbname; // DB 열기 rc = sqlite3_open(mdbname.c_str(), &mdb); if(rc == SQLITE_OK) { classCheckFlag = true; } } ~Sqlite() { sqlite3_close(mdb); } bool ClassCheck() { return classCheckFlag; } int Exec(string sql) { int rc; // sql을 실행한다. rc = sqlite3_prepare(mdb, sql.c_str(), sql.length(), &stmt, NULL); if(rc != SQLITE_OK) { return 1; } return 0; } vector<string> GetRows() { int rc; int n; int i; char buf[80]; mRow.clear(); // sqlite3_step로 row 데이터를 하나씩 가져온다. rc = sqlite3_step(stmt); if(rc != SQLITE_DONE) { switch(rc) { case SQLITE_BUSY: break; case SQLITE_ERROR: break; // row 데이터를 가져왔다면 // 컬럼 데이터를 읽어온다. case SQLITE_ROW: n = sqlite3_column_count(stmt); for(i = 0; i < n ; i++) { switch(sqlite3_column_type(stmt, i)) { case SQLITE_TEXT: mRow.push_back((const char *)sqlite3_column_text(stmt, i)); break; case SQLITE_INTEGER: sprintf(buf, "%d", sqlite3_column_int(stmt, i)); mRow.push_back(buf); break; case SQLITE_FLOAT: sprintf(buf, "%f", sqlite3_column_double(stmt, i)); mRow.push_back(buf); break; case SQLITE_NULL: mRow.push_back(""); break; default: cout << "Unknown Field" << endl; break; } } break; case SQLITE_MISUSE: break; default: break; } } else { cout << "SQL Exec Complete" << endl; } return mRow; } void ExecFree() { sqlite3_finalize(stmt); } int Exec(string sql, int (*callback)(void*,int,char**,char**)) { int rc; rc = sqlite3_exec(mdb, sql.c_str(), callback, 0, NULL); if(rc != SQLITE_OK) { return 1; } return 0; } }; int main() { vector<string> Row; Sqlite mySql("test.db"); if(!mySql.ClassCheck()) { return 1; } mySql.Exec("select * from session"); int i; for(;;) { Row = mySql.GetRows(); if(Row.size() > 0) { for(i = 0; i < Row.size(); i++) { cout << Row[i] << " "; } cout << endl; } else { break; } } mySql.ExecFree(); }
Copyrights © - Joinc, All Rights Reserved. Inherited From - Yundream Rebranded By - Joonphil
소개
Recent Posts
Archive Posts
Tags