linuxsqlite3
如果是在编译阶段出现问题则是没有引用头文件
如果是链接阶段则是没有链接sqlite库
简单来说
gcc test.c -lsqlite3
这样编译, test.c里面引用#include <sqlite3.h>
要保证有这个文件 /usr/include/sqlite3.h (如果位置不对则使用 -I 参数调整)
这只是最原始的办法, 稍微好点的是使用gcc test.c `pkg-config --libs --cfalgs sqlite3`这类形式
具体参考pkg-config这个工具
真实项目中一般都不会这样用,有专门的工程管理工具如autoconfig,cmake之类的。
对于初学者 建议去熟悉 编译和链接这2个过程的一些介绍,和gcc 的-I -L 这2个参数。
2. 怎样在Linux下从源代码安装SQLite 3
安装 SQLite3
Uncompress the tar.gz file and install SQLite3 as shown below.
解压tar.gz文件并像下面所示安装
tar xvfz sqlite-autoconf-3070603.tar.gz
cd sqlite-autoconf-3070603
./configure
make
make install
make安装命令后会有以下的输出。
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
./libtool --mode=install /usr/bin/install -c sqlite3 /usr/local/bin/sqlite3
/usr/bin/install -c .libs/sqlite3 /usr/local/bin/sqlite3
test -z "/usr/local/include" || mkdir -p -- "/usr/local/include"
/usr/bin/install -c -m 644 'sqlite3.h' '/usr/local/include/sqlite3.h'
/usr/bin/install -c -m 644 'sqlite3ext.h' '/usr/local/include/sqlite3ext.h'
test -z "/usr/local/share/man/man1" || mkdir -p -- "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 './sqlite3.1' '/usr/local/share/man/man1/sqlite3.1'
test -z "/usr/local/lib/pkgconfig" || mkdir -p -- "/usr/local/lib/pkgconfig"
/usr/bin/install -c -m 644 'sqlite3.pc' '/usr/local/lib/pkgconfig/sqlite3.pc'
3. 在Linux环境里怎么打开一个sqlite的数据库
下载一个Linux 的sqlite3工具(或到SqLite网站下载sqlite的源代码,在你的系统中编译出sqlite3工具),用这个工具打开:
sqlite3 /tmp/test.db
4. linux sqlite3怎么通过命令行退出
ctrl + d 可以直接退出sqlite3
5. 如何在Linux下用C语言操作数据库sqlite3
示例代码:
// name: query.c
// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !
// Author : zieckey All rights reserved.
// data : 2006/11/18
#include <stdio.h>
#include <stdlib.h>
#include "sqlite3.h"
#define _DEBUG_
int main( void )
{
sqlite3 *db=NULL;
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("zieckey.db", &db); //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件
if( rc )
{
fprintf(stderr, "Can't open database: %s
", sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf("You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
");
//创建一个表,如果该表存在,则不创建,并给出提示信息,存储在 zErrMsg 中
char *sql = " CREATE TABLE SensorData(
ID INTEGER PRIMARY KEY,
SensorID INTEGER,
SiteNum INTEGER,
Time VARCHAR(12),
SensorParameter REAL
);" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
//插入数据
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011206', 18.9 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
sql = "INSERT INTO "SensorData" VALUES(NULL , 1 , 1 , '200605011306', 16.4 );" ;
sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
int nrow = 0, ncolumn = 0;
char **azResult; //二维数组存放结果
//查询数据
sql = "SELECT * FROM SensorData ";
sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
int i = 0 ;
printf( "row:%d column=%d
" , nrow , ncolumn );
printf( "
The result of querying is :
" );
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s
", i , azResult[i] );
//释放掉 azResult 的内存空间
sqlite3_free_table( azResult );
#ifdef _DEBUG_
printf("zErrMsg = %s
", zErrMsg);
#endif
sqlite3_close(db); //关闭数据库
return 0;
}
我们这里用到了一个查询的语句是 "SELECT * FROM SensorData " ,
在C语言中对应的函数接口是 sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
这个函数接口的解释在程序中已经注释。
下面我们编译运行下看看,
[root@localhost temp]# export LD_LIBRARY_PATH=/usr/local/sqlite3/lib:$LD_LIBRARY_PATH
[root@localhost temp]# gcc query.c -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
query.c:29:21: warning: multi-line string literals are deprecated
[root@localhost temp]# ./a.out
You have opened a sqlite3 database named zieckey.db successfully!
Congratulations! Have fun ! ^-^
zErrMsg = (null)
row:2 column=5
The result of querying is :
azResult[0] = ID
azResult[1] = SensorID
azResult[2] = SiteNum
azResult[3] = Time
azResult[4] = SensorParameter
azResult[5] = 1
azResult[6] = 1
azResult[7] = 1
azResult[8] = 200605011206
azResult[9] = 18.9
azResult[10] = 2
azResult[11] = 1
azResult[12] = 1
azResult[13] = 200605011306
azResult[14] = 16.4
zErrMsg = (null)
这里我们可以看到,azResult 的前面 5 个数据正好是我们的表 SensorData 的列属性,
之后才是我们要查询的数据。所以我们的程序中才有 i<( nrow + 1 ) * ncolumn 的判断条件:
for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
printf( "azResult[%d] = %s ", i , azResult[i] );
输出中有 zErrMsg = (null) 这样的字句,这是 zErrMsg 保留的错误信息,
正如你所看到的,zErrMsg 为空,表明在执行过程中没有错误信息。
6. 如何在Linux中向sqlite3数据库中插入数据
0. 引言 我们这篇文章主要讲述了如何在C/C++语言中调用 sqlite 的函数接口来实现对数据库的管理, 包括创建数据库、创建表格、插入数据、查询数据、删除数据等。 1. 说明 这里我们假设你已经编译好了sqlite的库文件 : libsqlite3.a libsqlite3.la libsqlite3.so libsqlite3.so.0 libsqlite3.so.0.8.6 pkgconfig 和可执行文件 : sqlite3 我们再假设你的sqlite3的安装目录在 /usr/local/sqlite3 目录下。 如果不是,我们可以这样做,将你的安装文件复制到 /usr/local/sqlite3 这个目录, 这样我们好在下面的操作中更加统一,从而减少出错的概率 例如:[root@localhost home]# cp -rf sqlite-3.3.8-ix86/ /usr/local/sqlite3 这里假设 /home/sqlite-3.3.8-ix86/ 是你的安装目录,也就是说你的sqlite原来就是安装在这里 这样之后,我们的sqlite3的库文件目录是:/usr/local/sqlite3/lib 可执行文件 sqlite3 的目录是: /usr/local/sqlite3/bin 头文件 sqlite3.h 的目录是: /usr/local/sqlite3/include 好拉,现在开始我们的Linux下sqlite3编程之旅。 2. 开始 这里我们现在进行一个测试。 现在我们来写个C/C++程序,调用 sqlite 的 API 接口函数。 下面是一个C程序的例子,显示怎么使用 sqlite 的 C/C++ 接口. 数据库的名字由第一个参数取得且第二个参数或更多的参数是 SQL 执行语句. 这个函数调用sqlite3_open() 在 16 行打开数据库,并且sqlite3_close() 在 25 行关闭数据库连接。 [root@localhost temp]# vi opendbsqlite.c 按下i 键切换到输入模式,输入下列代码:// name: opendbsqlite.c // This prog is used to test C/C++ API for sqlite3.It is very simple,ha! // Author : zieckey All rights reserved. // data : 2006/11/13 #include <stdio.h> #include <sqlite3.h> int main( void ) { sqlite3 *db=NULL; char *zErrMsg = 0; int rc; //打开指定的数据库文件,如果不存在将创建一个同名的数据库文件 rc = sqlite3_open("zieckey.db", &db); if( rc ) { fprintf(stderr, "Can't open database: %s ", sqlite3_errmsg(db)); sqlite3_close(db); exit(1); } else printf("You have opened a sqlite3 database named zieckey.db successfully! Congratulations! Have fun ! ^-^ "); sqlite3_close(db); //关闭数据库 return 0; } 退出,保存。(代码输入完成后,按下 Esc 键,然后输入: :wq ,回车就好拉) 好拉,现在编译:[root@localhost temp]# gcc opendbsqlite.c -o db.out 或者遇到这样的问题:[root@localhost temp]# gcc opendbsqlite.c -o db.out opendbsqlite.c:11:21: sqlite3.h: 没有那个文件或目录 opendbsqlite.c: In function `main': opendbsqlite.c:19: `sqlite3' undeclared (first use in this function) opendbsqlite.c:19: (Each undeclared identifier is reported only once opendbsqlite.c:19: for each function it appears in.) opendbsqlite.c:19: `db' undeclared (first use in this function) 这是由于没有找到头文件的原因。 也许会碰到类似这样的问题:[root@localhost temp]# gcc opendbsqlite.c -o db.out /tmp/ccTkItnN.o(.text+0x2b): In function `main': : undefined reference to `sqlite3_open' /tmp/ccTkItnN.o(.text+0x45): In function `main': : undefined reference to `sqlite3_errmsg' /tmp/ccTkItnN.o(.text+0x67): In function `main': : undefined reference to `sqlite3_close' /tmp/ccTkItnN.o(.text+0x8f): In function `main': : undefined reference to `sqlite3_close' collect2: ld returned 1 exit status 这是个没有找到库文件的问题。 下面我们着手解决这些问题。 由于用到了用户自己的库文件,所用应该指明所用到的库,我们可以这样编译: [root@localhost temp]# gcc opendbsqlite.c -o db.out -lsqlite3 我用用 -lsqlite3 选项就可以了(前面我们生成的库文件是 libsqlite3.so.0.8.6 等, 去掉前面的lib和后面的版本标志,就剩下 sqlite3 了所以是 -lsqlite3 )。 如果我们在编译安装的时候,选择了安装路径,例如这样的话:....... # ../sqlite/configure --prefix=/usr/local/sqlite3 # make .......作者:zieckey
insert into thetable values (...)
7. sqlite3 在linux下怎么使用
如果是ubuntu, 可以用sudo apt-get install sqlite3 安装
8. linux下怎样能执行sqlite3多条SQL语句,比如一个txt文档里存放多条语句怎样来执行
只能循环读出来执行,还要看 是不是带参数,
下面是个读sql 语句的函数
int db_order(sqlite3 *db,char *sql)
{
va_list ap;
int ret = 0;
ret = sqlite3_exec(db, sql, NULL, NULL, NULL);
sqlite3_free(sql);
if(ret != SQLITE_OK) {
fputs("insert error\n",stderr);
}
return ret;
}
int main(void)
{
sqlite3 *db;
char *sql=NULL;
sql = sqlite3_mprintf("select * from datebase;");
db_order(db,sql);
}
你把sqlite3_mprintf()里的语句换做读出来的字符串
9. linux sqlite3使用的一个问题
这个a表是建在main库里的(此时为内存库), 而非附加上来的cc.db里
所以在退出(之后被释放),再进入时没有存储。
若要存储于cc.db中:
# sqlite3 cc.db
SQLite version 3.5.6
Enter ".help" for instructions
sqlite> create table a(id int primary key );
sqlite> .tables
a
sqlite> .quit
[root@localhost root]#
10. 怎样在Linux下从源代码安装SQLite3
安装 SQLite3
Uncompress the tar.gz file and install SQLite3 as shown below.
解压tar.gz文件并像下面所示安装
tar xvfz sqlite-autoconf-3070603.tar.gz
cd sqlite-autoconf-3070603
./configure
make
make install
make安装命令后会有以下的输出。
test -z "/usr/local/bin" || mkdir -p -- "/usr/local/bin"
./libtool --mode=install /usr/bin/install -c sqlite3 /usr/local/bin/sqlite3
/usr/bin/install -c .libs/sqlite3 /usr/local/bin/sqlite3
test -z "/usr/local/include" || mkdir -p -- "/usr/local/include"
/usr/bin/install -c -m 644 'sqlite3.h' '/usr/local/include/sqlite3.h'
/usr/bin/install -c -m 644 'sqlite3ext.h' '/usr/local/include/sqlite3ext.h'
test -z "/usr/local/share/man/man1" || mkdir -p -- "/usr/local/share/man/man1"
/usr/bin/install -c -m 644 './sqlite3.1' '/usr/local/share/man/man1/sqlite3.1'
test -z "/usr/local/lib/pkgconfig" || mkdir -p -- "/usr/local/lib/pkgconfig"
/usr/bin/install -c -m 644 'sqlite3.pc' '/usr/local/lib/pkgconfig/sqlite3.pc'
提示:如果你对mysql数据库有兴趣,你也可以安装在你的系统中。