您的位置:首页 > 数据库

接上回书:关于在OK6410B上使用轻量级数据库sqlite

2013-12-18 14:24 531 查看
上回说到任务2已经结束,交给了下家,这回要好好看看sqlite的使用。

sqlite的安装网上都有,需要注意的就是编译C程序的时候,需要指定库文件,如果头文件用的是<>标志,那么就需要指定sqlite的头文件的绝对位置,例如:

cc opendbsqlite.c -lsqlite3 -L/usr/local/arm-linux/sqlite-ix86-linux/lib -I/usr/local/arm-linux/sqlite-ix86-linux/include

本次调用sqlite主要用到的接口有:打开数据库和链表,插入数据,删除和覆盖数据

参考;http://www.cnblogs.com/yubinfeng/archive/2010/11/02/1867386.html

如果想往数据库中插入某个变量时,可以使用sqlite3_mprintf()函数,如下,向数据库插入一个30的变量

int k= 30; sql=sqlite3_mprintf("INSERT INTO \"mytable\" VALUES(%d)", k);

编译的时候将头文件和库写到makefile中。

具体使用如下,是按照某个博客写的,时间有点久,记不住了:

/**********************

 **Time: 2013/8/29

 **Autor: c_GuoLin

 **Purpose: 1.To kown how to use the SQLITE DB well and how to call the created db. 2.Kown how to use the function:sqlite3_open,sqlite3_close,sqlite3_exec,

sqlite3_get_table,sqlite3_free_table.

 **Description: Create or Open a DB,then create a table in this DB.Insert some infromation to this table and show it,update it,delete it.

*/

#include <stdio.h>

#include <sqlite3.h>

#define _DEBUG_

int main()

{
sqlite3* ppDb = NULL;
char *errmsg = NULL;
int k = 25;
int rc = 0 ;

//打开or创建数据库!
rc = sqlite3_open("DB.db", &ppDb);
if(rc != SQLITE_OK)
{
fprintf(stderr, "Can't open DateBase: %s\n", sqlite3_errmsg(ppDb));
sqlite3_close(ppDb);
return -1;
}
#ifdef _DEBUG_
printf("Creat OR Open DateBase:DB.db OK!\n");
#endif

//创建表单!

/* char *sql = "CREATE TABLE mytable(\
ID INTEGER PRIMARY KEY,\
STUDENT_NAME VARCHAR(64),\
STUDENT_ID VARCHAR(12),\
STUDENT_AGE INTEGER\
);";*/

char *sql = NULL;
sql = "CREATE TABLE mytable(ID INTEGER PAIMARY,\
STUDENT_NAME VARCHAR(64),\
STUDENT_ID VARCHAR(10),\
STUDENT_AGE INTEGER\
);";

//使创建的表单生效!
sqlite3_exec(ppDb, sql, 0, 0, &errmsg);
#ifdef _DEBUG_
printf("errmsg = %s\n", errmsg);
#endif

//插入数据到表单!
//sql = "INSERT INTO \"mytable\" VALUES(1, '薛磊', '0911002038', k);";
sql=sqlite3_mprintf("INSERT INTO \"mytable\" VALUES(1, '薛磊', '0911002038', 24)");

sqlite3_exec(ppDb, sql, 0, 0, &errmsg);
#ifdef _DEBUG_
printf("errmsg = %s\n", errmsg);
#endif

int nrow = 0, ncolumn = 0;
char **azResult; //二维数组存放结果

//查询数据表中的数据!
sql = "select * from mytable;";
int i = 0;
sqlite3_get_table(ppDb, sql, &azResult, &nrow, &ncolumn, &errmsg);
printf("nrow = %d,ncolumn = %d\n", nrow, ncolumn);
printf( "\nThe result of querying is : \n" );
for(;i < (1 + nrow) * ncolumn;i++)
{
printf("azResult[%d] = %s\n",i,azResult[i]);
}

//修改表中的数据!
//sql = "UPDATE mytable SET STUDENT_NAME = '林国峰' WHERE STUDENT_NAME='薛磊';";
sql=sqlite3_mprintf("UPDATE mytable SET STUDENT_AGE = %d WHERE STUDENT_NAME='薛磊'", k);
//sql = "UPDATE mytable SET STUDENT_AGE = 30 WHERE STUDENT_NAME='薛磊';";
sqlite3_exec(ppDb, sql, 0, 0, &errmsg);
#ifdef _DEBUG_
printf("errmsg = %s\n", errmsg);
#endif
sql = "select * from mytable;";
sqlite3_get_table(ppDb, sql, &azResult, &nrow, &ncolumn, &errmsg);
printf("nrow = %d,ncolumn = %d\n", nrow, ncolumn);
printf( "\nThe result of querying is : \n" );
for(i = 0;i < (1 + nrow) * ncolumn;i++)
{
printf("azResult[%d] = %s\n",i,azResult[i]);
}

//删除数据表中的数据!
sql = "DELETE FROM mytable WHERE STUDENT_NAME = '薛磊';";
sqlite3_exec(ppDb, sql, 0, 0, &errmsg);
sql = "DELETE FROM mytable WHERE STUDENT_NAME = '林国峰';";
sqlite3_exec(ppDb, sql, 0, 0, &errmsg);
#ifdef _DEBUG_
printf("errmsg = %s\n", errmsg);
#endif
sql = "select * from mytable;";
sqlite3_get_table(ppDb, sql, &azResult, &nrow, &ncolumn, &errmsg);
printf("nrow = %d,ncolumn = %d\n", nrow, ncolumn);
printf( "\nThe result of querying is : \n" );
for(i = 0;i < (1 + nrow) * ncolumn;i++)
{
printf("azResult[%d] = %s\n",i,azResult[i]);
}
sqlite3_free_table( azResult );
sqlite3_close(ppDb);
return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: