SQLite在linux下的安装
下载 sqlite-3.3.6.tar.gz
二、 SQLite 基本操作 如以下操作:创建表、插入、查询: sqlite>createtabletbl1(onevarchar(10),twosmallint); 注意每句SQL 语句后一定要有分号 semicolon 。 Special commands to sqlite3 : sqlite>.help .databasesListnamesandfilesofattacheddatabases .outputFILENAMESendoutputtoFILENAME .tables List the tables 参考文件:A command-line access program for sqlite databases//www.sqlite.org
三、C/C++ 下SQLite 编程 参考文件:A introduction to the sqlite c/c++ interface 找到安装SQLite 的路径: 我们的 sqlite3 的库文件目录是: /usr/local/sqlite3/lib // 我的机子安装目录文件名是 sqlite-3.3.6 编译指南 : 现在编译: [root@localhost dada]# gcc c3.c -o c3 opendbsqlite.c:11:21: sqlite3.h: 没有那个文件或目录 /tmp/ccTkItnN.o(.text+0x2b): In function `main': 可以在 gcc 语句后面加上如下 -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include 指明用到的库文件;为库文件指定路径;为头文件指定路径 继续编译 : 出现 " error while loading shared libraries " 等错误 我们可以这样解决: [root@localhost temp]# gcc c3.c -o c3 -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include –static 静态编译后的文件相对动态编译更大,很容易理解,静态编译把头库文件作为程序的一部分都包含进来了。 方法二:重新配置系统环境变量 LD_LIBRARY_PATH 好了,现在我们来指定系统环境变量 LD_LIBRARY_PATH 的值 …. LD_LIBRARY_PATH=/usr/local/sqlite3/lib: ….. ( 看到了吧, LD_LIBRARY_PATH 这一行开始就是 sqlite3 的库文件路径: ) 我们推荐使用动态编译的方法。
常用函数 int sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
int sqlite3_close(sqlite3 *);
int sqlite3_exec(sqlite3*,const char *sql,sqlite3_callback,void *,char **errmsg ); 查询: int sqlite3_get_table(
sqlite3 *db, /* An open database */
const char *zSql, /* SQL to be evaluated */
char ***pazResult, /* Results of the query */
int *pnRow, /* Number of result rows written here */
int *pnColumn, /* Number of result columns written here */
char **pzErrmsg /* Error msg written here */
);
void sqlite3_free_table(char **result); // 释放内存空间
例子程序: #include <stdio.h> #include </usr/local/sqlite-3.3.6/include/sqlite3.h> int main(void){ sqlite3 *db; char *zErrMsg = 0; int rc; rc = sqlite3_open("text.db",&db); // 打开数据库 if( rc ){ fprintf(stderr,"Can't open database: %s/n",sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } else printf("you have opened a sqlite3 database named text.db sucessfully!"); char *sql="create table student(id integer,name varchar(10));"; // 创建表 sqlite3_exec(db,sql,&zErrMsg); sql="insert into/"student/" values(23,'Lebron');"; 插入记录 sqlite3_exec(db,&zErrMsg); int nrow = 0,ncolumn = 0; char **azResult; // 二维数组存放结果 // 查询数据 /* int sqlite3_get_table(sqlite3*,char***result,int *nrow,int *ncolumn,char **errmsg ); result 中是以数组的形式存放你所查询的数据,首先是表名,再是数据。 nrow,ncolumn 分别为查询语句返回的结果集的行数,列数,没有查到结果时返回 0 */ sql = "SELECT * FROM student "; sqlite3_get_table( db,&azResult,&nrow,&ncolumn,&zErrMsg ); int i = 0 ; printf( "row:%d column=%d /n",nrow,ncolumn ); printf( "/nThe result of querying is : /n" ); for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ ) printf( "azResult[%d] = %s/n",i,azResult[i] ); sql = "DELETE FROM student WHERE ID = 1 ;" ; // 删除记录 // 释放掉 azResult 的内存空间 sqlite3_close(db); // 关闭数据库 return 0; } < 上述代码可以在本机 /root/dada/c3.c 中找到 .>
两点说明: 1 程序会在开头定义 #define _DEBUG_ #ifdef _DEBUG_ 如果调试的话,即有 #define _DEBUG_ 就会输出调试的错误信息,否则如果注释掉 #define _DEBUG 就不执行这段代码。
2 rc = sqlite3_open("text.db",&db); 如果 text.db 不存在的话,则是会在 c3 文件同目录下自动生成这样一个同名的数据库。 如何执行一个.db 文件 (通常这个文件不在安装 sqlite 的目录路径下): # /usr/local/sqlite-3.3.6/bin/sqlite3 text.db //( /usr/local/sqlite-3.3.6/bin/sqlite3 即是程序 ) 若出现错误 error:while loading shared libraries 则需要先执行 --- export LD_LIBRARY_PATH=/usr/local/sqlite-3.3.6/lib:$LD_LIBRARY_PATH 然后就可以进入数据库了: sqlite> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |