wince下如何操作sqlite数据库

前端之家收集整理的这篇文章主要介绍了wince下如何操作sqlite数据库前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

sqlite简介,是一款轻型的数据库,是遵守ACID的关联式数据库管理系统,它的设计目标是嵌入式的,而且目前已经在很多嵌入式产品中使用了它,它占用资源非常的低,在嵌入式设备中,可能只需要几百K的内存就够了。它能够支持Windows/Linux/Unix等等主流的操作系统,同时能够跟很多程序语言相结合,比如 Tcl、C#、PHP、Java等,还有ODBC接口,同样比起MysqL、Postgresql这两款开源世界著名的数据库管理系统来讲,它的处理速度比他们都快。sqlite第一个Alpha版本诞生于2000年5月。 至今已经有12个年头,sqlite也迎来了一个版本 sqlite 3已经发布。

现在官网上下载sqlite3,http://www.sqlite.org/download.html

sqlite-amalgamation-3071401.zip
(1.32 MiB)
This ZIP archive contains all C source code for sqlite 3.7.14.1 combined into a single source file (theamalgamation).
(sha1: dc64b561fd0f27f5cf2aece439aae12fc3b387cc)

选择这个包含4个文件取其中sqlite3.h.sqlite3.c两个文件

现在新建工程选择mfc应用程序(方便快捷),然后添加上面2个文件,上面sqlite3.c不要预编译,如果用预编译会一连串错误添加进来编译下通过。然后为了操作更加简洁可以在封装一下sqlite3.c里面的接口,写一个类MysqLite;

/**********************************************MysqLite.h********************************************/

#include <st@R_403_410@.h>

#include <stdlib.h>

#include <string.h>

#include "sqlite3.h"

class MysqLite

{
public:
MysqLite(void);
~MysqLite(void);
private:

sqlite3 *db;//数据库句柄
char **azResult; //二维数组存放结果
char *zErrMsg;//保存错误信息
int row;
int column;

public:

bool sqlite_connect(char *filename);//连接数据库
bool sqlite_exec(char *sql);//执行sql命令
void sqlite_search(char *search_sql);//查询
bool sqlite_disconnect();//断开数据库连接

int GetTableRow() { return row; }//查询后,取得表“列”数
int GetTableColumn() { return column; }//查询后,取得表“栏”数
char *GetErrorMsg() { return zErrMsg; }//取得当前错误提示
char *GetTableData(int x,int y) { return *(azResult+x+y*column); }//查询后,取得表内某个单元值

};

/***********************************************MysqLite.cpp*******************************************/

#include "StdAfx.h"
#include "MysqLite.h"

MysqLite::MysqLite(void)
{
}

MysqLite::~MysqLite(void)
{
}

bool MysqLite::sqlite_connect(char *filename)

{

db=NULL;

zErrMsg = 0;

row = 0,column = 0;

int rc;

rc = sqlite3_open(filename,&db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件

if( rc )

{

strcpy(zErrMsg,sqlite3_errmsg(db));//保存错误信息

sqlite3_close(db);

return false;

}

return true;

}

bool MysqLite::sqlite_exec(char *sql)

{

int rc;

rc=sqlite3_exec( db,sql,&zErrMsg );

if(rc == sqlITE_OK)

return true;

return false;

}

void MysqLite::sqlite_search(char *search_sql)

{

sqlite3_get_table( db,search_sql,&azResult,&row,&column,&zErrMsg);

}

bool MysqLite::sqlite_disconnect()

{

//释放掉 azResult 的内存空间

sqlite3_free_table( azResult );

if(sqlite3_close(db)==sqlITE_OK) //关闭数据库

return true;

return false;

}

/**************************************************end***************************************************/

然后在我们调用的地方初始化打开

bool result = false;

MysqLite *sqlite=new MysqLite();

result=sqlite->sqlite_connect("\\sdmmc\\test.db"); //打开数据库

if(!result) cout<<sqlite->GetErrorMsg()<<endl;

result=sqlite->sqlite_exec("CREATE TABLE SensorData(ID INTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,Time VARCHAR(500),SensorParameterREAL);"); //创建表

if(!result) cout<<sqlite->GetErrorMsg()<<endl;

//下面插入两条数据
result=sqlite->sqlite_exec("INSERT INTO SensorData(ID,SensorID,SiteNum,Time,SensorParameterREAL) VALUES(NULL,1,'200605011206',18.9 );");

if(!result) cout<<sqlite->GetErrorMsg()<<endl;

result=sqlite->sqlite_exec("INSERT INTO SensorData(ID,2,20,'201209011206',22.5 );");

if(!result) cout<<sqlite->GetErrorMsg()<<endl;

//查询数据

sqlite->sqlite_search("SELECT * from SensorData");

cout<<sqlite->GetTableColumn()<<" "<<sqlite->GetTableRow()<<endl; //打印行数和列数

//注意第一行是字段,我们其实sqlite->GetTableRow()是多少条数据。没包含字段。

for (int i=0; i<=sqlite->GetTableRow();i++)
{

for (int j=0; j<sqlite->GetTableColumn();j++)
{
printf("%s,",sqlite->GetTableData(j,i));
}
printf("\r\n");
}

打印出结果

ID,SensorParameterREAL,

1,200605011206,18.9,

2,201209011206,22.5,

猜你在找的Sqlite相关文章