プロファイル

カレンダー

S M T W T F S
   1234
567891011
12131415161718
19202122232425
2627282930  
<< November 2017 >>

categories

archives

放射線観測値

Radiation

福島第一原発
福島第二原発
柏崎刈羽原発
電力館

電力消費量

クラウドプレーヤー SQLITE その2

 
さぁ、第二回目。

前回は、SQLITEのCLIからCreateDBして、データインサートまでは出来ました。
まぁ、これぐらいはお茶のこさいさいでしょう。
しかもアプリから呼ぶのも決して難しくないんです。

そう、SQLITEの本筋はアプリケーション内部に包含され、C/C++から直接呼べるようになっ ていることです。

本家SQLITEのページで紹介されていますが、簡単に。
またサンプルコードは○×(まるぺけ)つくろーどっとコムさんからお借りしまし た。


#pragma comment( lib, "sqlite3.lib" )

#include <tchar.h>
#include <sqlite3.h>
#include <stdio.h>

// 抽出結果が返るコールバック関数
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
   int i;
   for(i=0; i<argc; i++)
      printf("%s = %s¥n", azColName[i], argv[i] ? argv[i] : "NULL");
   return SQLITE_OK;
}

int _tmain(int argc, _TCHAR* argv[])
{
   sqlite3 *db;
   char *zErrMsg = 0;

   // データベースファイルを新規生成
   int rc = sqlite3_open("CCJ.db", &db);

   // テーブル生成SQL文
   char create_sql[] = "CREATE TABLE tblCCJ ( "
                       "               id     INTEGER PRIMARY KEY, "
                       "               name TEXT    NOT NULL,    "
                       "               place  TEXT    NOT NULL     "
                       "             )                             ";

   // テーブルを生成
   rc = sqlite3_exec(db, create_sql, 0, 0, &zErrMsg);

   // データ追加SQL文
   char insert_sql[] = "INSERT INTO tblCCJ ( id, name, place )"
                       "            values (%d, '%s', '%s')     ";

   // 追加SQL文を生成
   char insert_record[2][256];
   sprintf( insert_record[0], insert_sql, 0, "Arai"  , "Saitama" );
   sprintf( insert_record[1], insert_sql, 1, "Nagumo" , "Tokyo" );

   // データ追加
   int i;
   for( i = 0; i < 3; i++ )
      rc = sqlite3_exec(db, insert_record[i], 0, 0, &zErrMsg);

   // tblCCJ"テーブルから"name"を抽出して列挙
   rc = sqlite3_exec(db, "SELECT name FROM tblCCJ", callback, 0, &zErrMsg);

   // データベースを閉じる
   sqlite3_close(db);
   return 0;
}


この様にDBのOpenはsqlite3_open()、Closeはsqlite3_close()、SQL実行はsqlite3_exec()で 実行できます。また、データベース領域も予め領域を確保するのではなく、データが挿入される毎にデータ領域を確保するので、最初はほんとに小さなデータ ベースが作成されます。エクスプローラーでファイルを見るとデータが無い状態では0バイトになってます。

この様に色んな使い方が出来、非常にコンパ クトなので、最近割りと組み込まれているケースが多いです。

そして、クラウドコンピューティングと言っても、絶対にオンラインであるとは 限らないので、オフライン時に状態保持をしておく必要があり、そのオフライン時にデータ保持にこのSQLITEが非常に役に立つのです。

か ならずオンラインだけを前提にしていると、オフラインになったときにシステムの状態が消え、最初から作業のやり直しなんてことも発生します。そんな事を避 けるために、クライアント側にはSQLITEの様な小さいデータベースを用意しておき、作業の継続性を高めることが出来るのです。

そうそして、GoogleGearもSQLITE使ってるんです!

私も気 に入って、最近は実装に使っています^^

なぐも

コメント
コメントする








   
この記事のトラックバックURL
トラックバック