sqlite3_get_table-80

问题描述:c语言 sqlite get_table 时候segmentation fault 大家好,给大家分享一下一个有趣的事情,很多人还不知道这一点。下面详细解释一下。现在让我们来看看!

如何在Windows下编译sqlite3,生成动态链接库并使用

sqlite3_get_table-80的相关图片

segmentation fault 即 段错误 。

一般都是非法内存操作,例如数组越界,指针乱指什么的。。。

我猜可能是strcat(temp, number);这句有问题。

strcat是连接字符串吧,第二个参数是字符串头地址,number估计是整型吧,用在这里肯定非法操作了。

用sprintf吧

sprintf(temp, "SELECT * FROM student WHERE NUMBER= '%d';", number);。

VC 读取SQLite数据库中的表的数据,该怎么解决的相关图片

VC 读取SQLite数据库中的表的数据,该怎么解决

一. 编译动态链接库库文件

下面的是我的编译过程,或许对你有些帮助:

1). 打开VC新建一个“Win32 Dynamic-Link Library”工程,命名为:sqlite3。

2). 在接下来的对话框中选择"An empty DLL project",点 FINISH->OK。

3). 将源码中所有的 *.c *.h *.def 复制到工程文件夹下。

4). 在工程的Source File中添加你下载到的SQLite源文件中所有*.c文件,

注意这里不要添加shell.c和tclsqlite.c这两个文件。

5). 将 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中。

6). 在Header File中添加你下载到的SQLite源文件中所有*.h文件,

7). 开始编译,Build(F7)一下。

也许到这里会遇到一个错误:

e:\zieckey\sqlite\sqlite3\sqlite3ext.h(22) : fatal error C1083: Cannot open include file: 'sqlite3.h': No such file or directory。

经检查发现,源码中包含sqlite3.h都是以 #include <sqlite3.h> 方式包含的,

这就是说编译器在系统默认路径中搜索,这样当然搜索不到 sqlite3.h 这个头文件啦,

这时可以改为 #include "sqlite3.h" ,让编译器在工程路径中搜索,

但是如果还有其他地方也是以 #include <sqlite3.h> 方式包含的,那么改源码就显得有点麻烦,

好了,可以这样,在菜单栏依次选择:Tools->Options...->Directeries。

在下面的Directeries选项中输入你的 sqlite3.h 的路径,这里也就是你的工程目录.。

添加好后,在编译一下就好了,

最后在工程目录的 Debug 目录生成了下面两个重要文件:。

动态链接库文件 sqlite3.dll 和引入库文件 sqlite3.lib。

二. 使用动态链接库

下面来编写个程序来测试下动态链接库.。

在VC下新建一个空的"Win32 Console Application" Win32控制台程序,工程命名为:TestSqliteOnWindows。

再新建一个 test.cpp 的C++语言源程序,源代码如下:。

// name: test.cpp。

// This prog is used to test C/C++ API for sqlite3 .It is very simple,ha !。

// Author : zieckey。

// data : 2006/11/28。

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

return (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 , 23 , 45 , '200605011306', 16.4 );" ;。

sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );。

sql = "INSERT INTO "SensorData" VALUES(NULL , 34 , 45 , '200605011306', 15.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] );。

//删除数据

sql = "DELETE FROM SensorData WHERE SensorID = 1 ;" ;。

sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );。

#ifdef _DEBUG_

printf("zErrMsg = %s ", zErrMsg);。

#endif

sql = "SELECT * FROM SensorData ";。

sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );。

printf( " row:%d column=%d " , nrow , ncolumn );。

printf( " After deleting , 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;

另外,将sqlite3.h sqlite3.lib sqlite3.dll文件复制到工程目录.。

最后 Project->Settings 在Link选项卡找到Object/library modules : 在最后填入sqlite3.lib 。

如果原来就有链接,请使用空格分隔。

现在可以编译了.

运行结果如下:

You have opened a sqlite3 database named zieckey.db successfully!。

Congratulations! Have fun ! ^-^。

zErrMsg = (null)。

row:3 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] = 23。

azResult[12] = 45。

azResult[13] = 200605011306。

azResult[14] = 16.4。

azResult[15] = 3。

azResult[16] = 34。

azResult[17] = 45。

azResult[18] = 200605011306。

azResult[19] = 15.4。

zErrMsg = (null)。

row:2 column=5

After deleting , the result of querying is :。

azResult[0] = ID。

azResult[1] = SensorID。

azResult[2] = SiteNum。

azResult[3] = Time。

azResult[4] = SensorParameter。

azResult[5] = 2。

azResult[6] = 23。

azResult[7] = 45。

azResult[8] = 200605011306。

azResult[9] = 16.4。

azResult[10] = 3。

azResult[11] = 34。

azResult[12] = 45。

azResult[13] = 200605011306。

azResult[14] = 15.4。

zErrMsg = (null)。

Press any key to continue。

这个程序,我们先创建一个数据库,然后新建一个表,然后插入一些数据,。

再查询看看插入的数据是否正确,然后又删除一些数据,删除后我们再查询了一下,。

发现我们的删除操作也是成功的.。

这个程序简单的调用 sqlite 的函数接口来实现对数据库的管理,

包括创建数据库、创建表格、插入数据、查询数据、删除数据等。

注:在上面的第五步

5). 将 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中。

是必须的, sqlite3.def 这个文件的加入会生成 *.lib引入库文件,这个对于*.dll文件是很重要的.否则你光有*.dll文件在程序调用的时候就不是那么方便了,因为这样你只能通过动态加载dll的方式调用dll库中函数。

三、如何编译sqlite3.4.2版本 (本人原创:添加于 2007年9月29日)

其实这个版本的比之前的更好编译而且很简单。

步骤如下:

1、在网站下载源文件,选择“sqlite-amalgamation-3_4_2.zip”。此文件中包含了sqlite3.h和sqlite3.c两个文件。

2、下载“sqlitedll-3_4_2.zip”,次文件中包含编译好的DLL文件和DEF文件,DEF文件用来在编译时生成lib文件。(重点)

3、打开VC新建一个“Win32 Dynamic-Link Library”工程,命名为:sqlite3。

4、 在接下来的对话框中选择"An empty DLL project",点 FINISH->OK。

5、将解压后的 *.c *.h *.def 复制到工程文件夹下。

6、在工程的Source File中添加你下载到的SQLite源文件中sqlite3.c文件,

7、 将 SQLite 源文件中的 sqlite3.def 文件添加到在工程的Source File中。

8、在Header File中添加你下载到的SQLite源文件中的sqlite3.h文件,

9、 开始编译,Build(F7)一下。

如何在Linux下用C语言操作数据库sqlite3的相关图片

如何在Linux下用C语言操作数据库sqlite3

1、使用insert方法插入记录。

sqlitedatabase的insert方法的签名为long。

insert(string

table,string

nullcolumnhack,contentvalues。

values),这个插入方法的参数说明如下:

table:代表想插入数据的表名。

nullcolumnhack:代表强行插入null值的数据列的列名。

values:代表一行记录的数据。

insert方法插入的一行记录使用contentvalues存放,contentvalues类似于map,它提供了put(string。

key,xxx

value)(其中key为数据列的列名)方法用于存入数据、getasxxx(string。

key)方法用于取出数据。

例如如下语句:

contentvalues

values=new

contentvalues();。

values.put("name","孙悟空"):

values.put("age",500);。

//返回新添记录的行号,该行号是一个内部直,与主键id无关,发生错误返回-1。

long

rowid=db.insert("person_inf",null,values);。

2、使用update方法更新数据。

sqlitedatabase的update方法签名为update(string。

table,contentvalues。

values,string

whereclause,string[]。

whereargs),这个更新方法的参数说明如下:

table:代表想要更新数据的表名。

values:代表想要更新的数据。

whereclause:满足该whereclause子句的记录将会被更新。

whereargs:用于为whereargs子句传递参数。

例如我们想要更新person_inf表中所有主键大于20的人的人名,可调用如下方法:

contentvalues

values=new

contentvalues();。

//存放更新后的人名

values.put("name","新人名");。

int

result=db.update("person_inf",values,"_id>?",new。

integer[]{20});。

3、使用delete方法删除记录。

sqlitedatabase的delete方法签名为delete(string。

table,string

whereclause,string[]。

whereargs),这个删除的参数说明如下:

table:代表想删除数据的表名。

whereclause:满足该whereclause子句的记录将会被删除。

whereargs:用于为whereargs子句传入参数。

删除person_inf表中所有人名以孙开头的记录。

int

result=db.delete("person_inf","person_name。

like

?",new

string[]{"孙_"});。

4、使用query方法查询记录。

sqlitedatabase的query方法签名为cursor。

query(boolean

distinct,string。

table,string[]

columns,string

selection,string[]。

selectionargs,string。

groupby,string

having,string

orderby,string

limit),这个query方法的参数说明如下。

distinct:指定是否去除重复记录。

table:执行查询数据的表名。

columns:要查询出来的列名。

selection:查询条件子句。

selectionargs:用于为selection子句中占位符传入参数值,值在数组中的位置与占位符在语句中的位置必须一致,否则就会有异常。

groupby:用于控制分组。

having:用于对分组进行过滤。

orderby:用于对记录进行排序。

limit:用于进行分页。

例如查询出person_inf表中人名以孙开头的数据。

cursor

cursor=db.query("person_inf",new。

string[]{"_id,name,age"},"name。

like

?",new

string

[]{"孙%"},null,null,"personid。

desc","5,10");

cursor.close();。

如何使用SQLite的相关图片

如何使用SQLite

示例代码:

// 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 为空,表明在执行过程中没有错误信息。

VC中用sqlite3如何获取数据库中的所有的表名?

SQLite3是目前最新的SQLite版本。可以从网站上下载SQLite3的源代码(本书使用的版本是sqlite-3.6.12.tar.gz)。

解压缩后进入sqlite-3.6.12的根目录,首先命令“./configure”生成Makefile文件,接着运行命令“make”对源代码进行编译,最后运行命令“make install”安装SQLite3。安装完毕后,可以运行命令sqlite3查看SQLite3是否能正常运行,如下所示:

[root@localhost ~]# sqlite3。

SQLite version 3.6.12。

Enter ".help" for instructions。

Enter SQL statements terminated with a ";"。

sqlite>

可以看到,SQLite3启动后会停留在提示符sqlite>处,等待用户输入SQL语句。

在使用SQLite3前需要先了解下SQLite3支持的数据类型。SQLite3支持的基本数据类型主要有以下几类:

NULL

NUMERIC

INTEGER

REAL

TEXT

SQLite3会自动把其他数据类型转换成以上5类基本数据类型,转换规则如下所示:

char、clob、test、varchar—> TEXT。

integer—>INTEGER。

real、double、float—> REAL。

blob—>NULL

其余数据类型都转变成NUMERIC。

下面通过一个实例来演示SQLite3的使用方法。

新建一个数据库

新建数据库test.db(使用.db后缀是为了标识数据库文件)。在test.db中新建一个表test_table,该表具有name,、sex、age三列。SQLite3的具体操作如下所示:

[root@localhost home]# sqlite3 test.db。

SQLite version 3.6.12。

Enter ".help" for instructions。

Enter SQL statements terminated with a ";"。

sqlite> create table test_table(name, sex, age);。

如果数据库test.db已经存在,则命令“sqlite3 test.db”会在当前目录下打开test.db。如果数据库test.db不存在,则命令“sqlite3 test.db”会在当前目录下新建数据库test.db。为了提高效率,SQLite3并不会马上创建test.db,而是等到第一个表创建完成后才会在物理上创建数据库。

由于SQLite3能根据插入数据的实际类型动态改变列的类型,所以在create语句中并不要求给出列的类型。

创建索引

为了加快表的查询速度,往往在主键上添加索引。如下所示的是在name列上添加索引的过程。

sqlite> create index test_index on test_table(name);。

操作数据

如下所示的是在test_table中进行数据的插入、更新、删除操作:

sqlite> insert into test_table values ('xiaoming', 'male', 20);。

sqlite> insert into test_table values ('xiaohong', 'female', 18);。

sqlite> select * from test_table;。

xiaoming|male|20。

xiaohong|female|18。

sqlite> update test_table set age=19 where name = 'xiaohong';。

sqlite> select * from test_table;。

xiaoming|male|20。

xiaohong|female|19。

sqlite> delete from test_table where name = 'xiaoming';。

sqlite> select * from test_table;。

xiaohong|female|19。

批量操作数据库

如下所示的是在test_table中连续插入两条记录:

sqlite> begin;。

sqlite> insert into test_table values ('xiaoxue', 'female', 18);。

sqlite> insert into test_table values ('xiaoliu', 'male', 20);。

sqlite> commit;。

sqlite> select * from test_table;。

xiaohong|female|19。

xiaoxue|male|18。

xiaoliu|male|20。

运行命令commit后,才会把插入的数据写入数据库中。

数据库的导入导出

如下所示的是把test.db导出到sql文件中:

[root@localhost home]# sqlite3 test.db ".dump" > test.sql;。

test.sql文件的内容如下所示:

BEGIN TRANSACTION;。

CREATE TABLE test_table(name, sex, age);。

INSERT INTO "test_table" VALUES('xiaohong','female',19);。

CREATE INDEX test_index on test_table(name);。

COMMIT;

如下所示的是导入test.sql文件(导入前删除原有的test.db):

[root@localhost home]# sqlite3 test.db < test.sql;。

通过对test.sql文件的导入导出,可以实现数据库文件的备份。

11.2.2 SQLite3的C接口。

以上介绍的是SQLite3数据库的命令操作方式。在实际使用中,一般都是应用程序需要对数据库进行访问。为此,SQLite3提供了各种编程语言的使用接口(本书介绍C语言接口)。SQLite3具有几十个C接口,下面介绍一些常用的C接口。

sqlite_open

作用:打开SQLite3数据库。

原型:int sqlite3_open(const char *dbname, sqlite3 **db)。

参数:

dbname:数据库的名称;

db:数据库的句柄;

sqlite_colse

作用:关闭SQLite3数据库。

原型:int sqlite_close(sqlite3 *db)。

例如:

test.c:

#include <stdio.h>。

#include <sqlite3.h>。

static sqlite3 *db=NULL;。

int main()

int rc;

rc= sqlite3_open("test.db", &db);。

if(rc)

printf("can't open database!\n");。

else

printf("open database success!\n");。

sqlite3_close(db);。

return 0;

运行命令“gcc –o test test.c –lsqlite3”进行编译,运行test的结果如下所示:

[root@localhost home]# open database success!。

sqlite_exec

作用:执行SQL语句

原型:int sqlite3_exec(sqlite3 *db, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg)。

参数:

db:数据库;

sql:SQL语句;

callback:回滚;

errmsg:错误信息

例如:

test.c:

#include <stdio.h>。

#include <sqlite3.h>。

static sqlite3 *db=NULL;。

static char *errmsg=NULL;。

int main()

int rc;

rc = sqlite3_open("test.db", &db);。

rc = sqlite3_exec(db,"insert into test_table values('daobao', 'male', 24)", 0, 0, &errmsg);。

if(rc)

printf("exec fail!\n");。

else

printf("exec success!\n");。

sqlite3_close(db);。

return 0;

编译完成后,运行test的结果如下所示:

[root@localhost home]# ./test。

exec success!

[root@localhost home]# sqlite3 test.db。

SQLite version 3.6.11。

Enter ".help" for instructions。

Enter SQL statements terminated with a ";"。

sqlite> select * from test_table;。

daobao|male|24

sqlite3_get_table。

作用:执行SQL查询

原型:int sqlite3_get_table(sqlite3 *db, const char *zSql, char ***pazResult, int *pnRow, int *pnColumn, char **pzErrmsg)。

参数:

db:数据库;

zSql:SQL语句;

pazResult:查询结果集;

pnRow:结果集的行数;

pnColumn:结果集的列数;

errmsg:错误信息;

sqlite3_free_table。

作用:注销结果集

原型:void sqlite3_free_table(char **result)。

参数:

result:结果集;

例如:

test.c:

#include <stdio.h>。

#include <sqlite3.h>。

static sqlite3 *db=NULL;。

static char **Result=NULL;。

static char *errmsg=NULL;。

int main()

int rc, i, j;

int nrow;

int ncolumn;

rc= sqlite3_open("test.db", &db);。

rc= sqlite3_get_table(db, "select * from test_table", &Result, &nrow, &ncolumn,。

&errmsg);

if(rc)

printf("query fail!\n");。

else

printf("query success!\n");。

for(i = 1; i <= nrow; i++)。

for(j = 0; j < ncolumn; j++)。

printf("%s | ", Result[i * ncolumn + j]);。

printf("\n");

sqlite3_free_table(Result);。

sqlite3_close(db);。

return 0;

编译完成后,运行test的结果如下所示:

[root@localhost home]# ./test。

query success!

xiaohong | female | 19 |。

xiaoxue | female | 18 |。

xiaoliu | male | 20 |。

daobao | male | 24 |。

sqlite3_prepare。

作用:把SQL语句编译成字节码,由后面的执行函数去执行。

原型:int sqlite3_prepare(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **stmt, const char **pTail)。

参数:

db:数据库;

zSql:SQL语句;

nByte:SQL语句的最大字节数;

stmt:Statement句柄;

pTail:SQL语句无用部分的指针;

sqlite3_step

作用:步步执行SQL语句字节码。

原型:int sqlite3_step (sqlite3_stmt *)。

例如:

test.c:

#include <stdio.h>。

#include <sqlite3.h>。

static sqlite3 *db=NULL;。

static sqlite3_stmt *stmt=NULL;。

int main()

int rc, i, j;

int ncolumn;

rc= sqlite3_open("test.db", &db);。

rc=sqlite3_prepare(db,"select * from test_table",-1,&stmt,0);。

if(rc)

printf("query fail!\n");。

else

printf("query success!\n");。

rc=sqlite3_step(stmt);。

ncolumn=sqlite3_column_count(stmt);。

while(rc==SQLITE_ROW)。

for(i=0; i<2; i++)。

printf("%s | ", sqlite3_column_text(stmt,i));。

printf("\n");

rc=sqlite3_step(stmt);。

sqlite3_finalize(stmt);。

sqlite3_close(db);。

return 0;

编译完成后,运行test的结果如下所示:

[root@localhost home]# ./test。

query success!

xiaohong | female | 19 |。

xiaoxue | female | 18 |。

xiaoliu | male | 20 |。

daobao | male | 24 |。

在程序中访问SQLite3数据库时,要注意C API的接口定义和数据类型是否正确,否则会得到错误的访问结果。

原文地址:http://www.qianchusai.com/sqlite3_get_table-80.html

waste-30

waste-30

河南之源-90,河南源之和信息科技有限公司

河南之源-90,河南源之和信息科技有限公司

缘对平台-50,对缘交友平台怎样

缘对平台-50,对缘交友平台怎样

handblown-90

handblown-90

驳论文范文及分析,驳论文优秀范文1000字

驳论文范文及分析,驳论文优秀范文1000字

startups-90

startups-90

三年级数学连续除应用题,小学三年级连除应用题讲解

三年级数学连续除应用题,小学三年级连除应用题讲解

积累句子并写出他内心的想法,积累句子并写出他内心的想法英文

积累句子并写出他内心的想法,积累句子并写出他内心的想法英文

フレーム-50,1400×49/50

フレーム-50,1400×49/50

威联通自带内网穿透,威联通自带内网穿透功能吗

威联通自带内网穿透,威联通自带内网穿透功能吗