sqlite环境配置linux,SQLite在linux下的安装

下载sqlite-3.3.6.tar.gz 解压并拷贝至你想要安装到的目录下,我选择的是/usr/local/sqlite-3.3.6 接着在终端里:# cd /usr/local/sqlite-3.3.6

# ./configure

# make

# make install

# make doc

make 的时候提示错误../sqlite-3.3.6/src/tclsqlite.c: In function `DbUpdateHandler':

../sqlite-3.3.6/src/tclsqlite.c:333: warning: passing arg 3 of `Tcl_ListObjAppendElement' makes pointer from integer without a cast

…… 这个都是tcl 相关的错误, 可以先安装ActiveTcl 以解决. 假如你不需要tcl 支持, 那么这个错误可以这样避免:

# ./configure --disable-tcl --prefix=/usr/local/sqlite-3.3.6 # make 如果提示没有可以编译的文件,则是第一次make 时已经执行过了,接着下面做就可以了;如果此次是第一次编译,应该不会再提示出错了# make install

# make doc 测试是否安装成功# cd /usr/lcoal/sqlite-3.3.6

# ./sqlite3 text.db // 这也是进入数据库的方法 如果安装成功,会出现下面这样的信息sqlite version 3.3.6

Enter ".help" for instructions

sqlite> 接下来就可以自由操作啦,和在windows 下是一样的啦。

二、 sqlite 基本操作

如以下操作:创建表、插入、查询:

sqlite>createtabletbl1(onevarchar(10),twosmallint); sqlite>insertintotbl1values('hello!',10); sqlite>insertintotbl1values('goodbye',20); sqlite>select*fromtbl1; hello!|10 goodbye|20 sqlite>

注意每句分号 semicolon 。

Special commands to sqlite3 :

sqlite>.help

.databasesListnamesandfilesofattacheddatabases .exitExitthisprogram

.outputFILENAMESendoutputtoFILENAME .outputstdoutSendoutputtothescreen

.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 可执行文件 sqlite3 的目录是: /usr/local/sqlite3/bin sqlite3.h 的目录是: /usr/local/sqlite3/include

编译指南 : 现在编译: [root@localhost dada]# gcc c3.c -o c3

opendbsqlite.c:11:21: sqlite3.h: 没有那个文件或目录 opendbsqlite.c: In function `main':

opendbsqlite.c:19: `sqlite3' undeclared (first use in this function) // 这是由于没有找到头文件的原因 。

/tmp/ccTkItnN.o(.text+0x2b): In function `main':

: undefined reference to `sqlite3_open'

/tmp/ccTkItnN.o(.text+0x45): In function `main': // 这是个没有找到库文件的问题。

可以在 gcc 语句后面加上如下

-lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include

指明用到的库文件;为库文件指定路径;为头文件指定路径

继续编译 :

出现 " error while loading shared libraries "

我们可以这样解决: 方法一:静态编译 在编译时加上 -static 参数,例如

[root@localhost temp]# gcc c3.c -o c3 -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include –static

静态编译后的文件相对动态编译更大,很容易理解,静态编译把头库文件作为程序的一部分都包含进来了。

方法二:重新配置系统环境变量 LD_LIBRARY_PATH 这时需要指定 libsqlite3.so.0 库文件的路径 , 也就是配置系统环境变量 LD_LIBRARY_PATH , 使系统能够找到 libsqlite3.so.0 。

好了,现在我们来指定系统环境变量 LD_LIBRARY_PATH 的值 在 shell 下输入: [root@localhost temp]# export LD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH 看看现在系统环境设置: [root@localhost temp]#env

….

LD_LIBRARY_PATH=/usr/local/sqlite3/lib:

….. ( 看到了吧, LD_LIBRARY_PATH 这一行开始就是 sqlite3 的库文件路径: ) 去掉 -static, 再编译: [root@localhost temp]# gcc c3.c -o c3 -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include

我们推荐使用动态编译的方法。 至此编译就不会有什么问题了,另外一点:如果在程序中把# include 写成# include, 这样在编译的时候就不需要 -I/usr/local/sqlite3/include 了。

常用函数

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 );

这就是执行一条

语句的函数。

1

个参数不再说了,是前面

open

函数得到的指针。说了是关键数据结构。

2

个参数

const char *sql

是一条

语句,以

/0

结尾。

3

个参数

sqlite3_callback

是回调,当这条语句执行之后,

sqlite3

会去调用你提供的这个函数。

4

个参数

void *

是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,这个指针比较重要,可以用来作参数的传递。如果不需要传递指针给回调函数,可以填

NULL

。等下我们再看回调函数的写法,以及这个参数的使用。

5

个参数

char ** errmsg

是错误信息。注意是指针的指针。

sqlite3

里面有很多固定的错误信息。执行

sqlite3_exec

之后,执行失败时可以查阅这个指针(直接

printf(“%s/n”,errmsg)

)得到一串字符串信息,这串信息告诉你错在什么地方。

sqlite3_exec

函数通过修改你传入的指针的指针,把你提供的指针指向错误提示信息,这样

sqlite3_exec

函数外面就可以通过这个

char*

得到具体错误提示。

说明:通常,

sqlite3_callback

和它后面的

void *

这两个位置都可以填

NULL

。填

NULL

表示你不需要回调。比如你做

insert

操作,做

delete

操作,就没有必要使用回调。而当你做

select

时,就要使用回调,因为

sqlite3

把数据查出来,得通过回调告诉你查出了什么数据。用

select

时也可以用

sqlite3_get_table

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

#include

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

printf( "azResult[%d] = %s/n",i,azResult[i] );

sql = "DELETE FROM student WHERE ID = 1 ;" ; // 删除记录 sqlite3_exec( db,&zErrMsg );

// 释放掉 azResult 的内存空间 sqlite3_free_table( azResult );

sqlite3_close(db); //

return 0;

}

< 上述代码可以在本机 /root/dada/c3.c 中找到 .>

两点说明:

1 程序会在开头定义 #define _DEBUG_

#ifdef _DEBUG_

printf("zErrMsg = %s /n",zErrMsg);

#endif

如果调试的话,即有 #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>

总结

以上是编程之家为你收集整理的SQLite在linux下的安装全部内容,希望文章能够帮你解决SQLite在linux下的安装所遇到的程序开发问题。

如果觉得编程之家网站内容还不错,欢迎将编程之家网站推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。

小编个人微信号 jb51ccc

喜欢与人分享编程技术与工作经验,欢迎加入编程之家官方交流群!

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值