`
weiyuhu
  • 浏览: 237681 次
  • 性别: Icon_minigender_1
  • 来自: 南京
社区版块
存档分类
最新评论

C语言中使用SQLite3手记

阅读更多
一直想找个嵌入式数据库来用用,几经辛苦,终于了解到有Berkeley DB和SQLite两种很不错的数据库。
在一番衡量之后,决定选用SQLite,毕竟它支持SQL。虽然性能比不上Berkeley DB,但免费小巧,速度快。
再者它支持SQL92标准,可移植性好。BDB虽然很强可以用于工业应用,但由于不是关系数据库,俺担心移植
性问题。
好了,说了一大堆废话,俺到http://www.sqlite.org下载了个Precompiled Binaries For Windows。
解压一看,发现只有一个执行文件sqlite3.exe
查了一下它的用法,发现挺强的,直接sqlite3 xx.db就能创建(如已存在则使用)xx.db为你的数据库。
然后在里面用create table等SQL语句就可操作该DATABASE了。
俺试着创建了一个数据库:
---------------------------------
g:>sqlite\sqlite3 wanna
sqlite> create table hello(
       -> id int,
       -> name varchar(30)
       -> );
sqlite> insert into hello(id,name) values(0,'WanaChan');
sqlite> select * from hello;
0|WannaChan

---------------------------------


可是到了这时候我很疑惑,因为我的目标是要用C或PYTHON来调用SQLITE的API编程的,只有一个EXE
还不够啊!找了很久在http://initd.org/tracker/pysqlite/wiki/pysqlite找到PYTHON的绑定。
但在官方主站找来找去只有TCL的绑定,没有C的,其它地方可找到C++的,但是还是没有C的!
怎么办呢?偶灵机一动,因为它上面有个SOURCE说是PURE C的,于是我把SOURCE下载下来解压,
发现有sqlite3.c sqlite3.h两个文件,于是试着从官方网站COPY个简单的程序来访问它:
------------------------------------
//hello.c
#include <stdio.h>
#include <sqlite3.h>

static int callback(void *NotUsed, int argc, char **argv, char **azColName){
    int i;
    for(i=0; i<argc; i++){
      printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
    }
    printf("\n");
    return 0;
}

int main(int argc, char **argv){
    sqlite3 *db;
    char *zErrMsg = 0;
    int rc;

    if( argc!=3 ){
      fprintf(stderr, "Usage: %s DATABASE SQL-STATEMENT\n", argv[0]);
      exit(1);
    }

    rc = sqlite3_open(arg[1], &db);
    if( rc ){
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      sqlite3_close(db);
      exit(1);
    }

    rc = sqlite3_exec(db, argv[2], callback, 0, &zErrMsg);
    if( rc!=SQLITE_OK ){
      fprintf(stderr, "SQL error: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
    }
    sqlite3_close(db);
    return 0;
}
------------------------------------

好了,下面尝试来编译它,我用的是MINGW的GCC,试了下面的命令:
-------------------------------------------------------------------------------
G:\sqlite>gcc -I. hello.c -L. -o hello.exe
C:\DOCUME~1\wanna\LOCALS~1\Temp/ccmqbaaa.o(.text+0xc3):hello.c: undefined refere
nce to `sqlite3_open'
C:\DOCUME~1\wanna\LOCALS~1\Temp/ccmqbaaa.o(.text+0xd7):hello.c: undefined refere
nce to `sqlite3_errmsg'
C:\DOCUME~1\wanna\LOCALS~1\Temp/ccmqbaaa.o(.text+0xfe):hello.c: undefined refere
nce to `sqlite3_close'
C:\DOCUME~1\wanna\LOCALS~1\Temp/ccmqbaaa.o(.text+0x13a):hello.c: undefined refer
ence to `sqlite3_exec'
C:\DOCUME~1\wanna\LOCALS~1\Temp/ccmqbaaa.o(.text+0x16d):hello.c: undefined refer
ence to `sqlite3_free'
C:\DOCUME~1\wanna\LOCALS~1\Temp/ccmqbaaa.o(.text+0x178):hello.c: undefined refer
ence to `sqlite3_close'
collect2: ld returned 1 exit status
-------------------------------------------------------------------------------
结果不行!怎么办呢?难道没办法了吗?抱着试试看的态度,我先把源代码编译成DLL看看:
G:\sqlite>gcc -shared -g -o sqlite3.dll sqlite3.c -O3 -s
接下来没有错误信息,是挺漫长的等待,我心情激动地等待着..

几分钟过去了..

HAHA,编译成功!

于是我 gcc -lsqlite3 -I. -L. hello.c -o hello.exe -s
编译又成功,有了个 hello.exe 于是我试试看:
----------------------------------------------
G:\sqlite>hello wanna "select * from hello;"
id = 0
name = WannaChan
----------------------------------------------
HOHO, 成功了!
分享到:
评论

相关推荐

    c语言数据库查询系统-C语言实现sqlite3数据库查询的基本方法.pdf

    代码中使用`sqlite3_errmsg()`获取错误信息,并通过`fprintf()`打印,确保在出现问题时能提供调试帮助。此外,`sqlite3_free()`用于释放内存,防止内存泄漏。 总之,这个文档提供了C语言实现SQLite3数据库查询的...

    C语言程序调用SQLite

    在C语言程序中使用SQLite,必须包含SQLite的头文件sqlite3.h,它包含了所有SQLite API的声明。这是编写SQLite操作程序的前提条件。 二、链接SQLite库文件 仅仅包含头文件是不够的,编译器还需要在链接阶段找到...

    C语言实现sqlite3的封装

    首先,让我们深入了解一下如何在C语言中封装SQLite3。这通常涉及到以下步骤: 1. **库的链接**:在Ubuntu环境下,你需要安装SQLite3的开发库,通过`sudo apt-get install libsqlite3-dev`命令完成。这样,编译器就...

    VC6.0 C语言操作sqlite3用到的工具

    SQLite3的API设计简洁,易于在C语言中使用。 压缩包内的文件列表提供了构建和使用SQLite3的必要组件: 1. `sqlite3.h`:这是SQLite3的头文件,包含了所有你需要在C程序中调用SQLite3函数的声明。你需要`#include`...

    linux下c语言sqlite3数据库用户注册登录并查询字典

    在Linux环境下,C语言与SQLite3数据库的交互是常见的数据管理任务。SQLite3是一个轻量级、嵌入式的关系型数据库管理系统,适用于多种操作系统,包括Linux。本项目着重讲解如何用C语言实现用户注册、登录功能,并进行...

    C语言实现SQLite的批量插入及性能对比

    对于单个插入,通常我们会使用`sqlite3_exec()`函数来执行诸如`INSERT INTO table_name VALUES (value1, value2, ...)`这样的SQL命令。每次调用该函数都会引发一次数据库事务,涉及I/O操作,这在大量数据插入时会...

    cgi c语言中sqlite3的使用

    cgi c语言中sqlite3的使用,调用sqlite3的api完成数据库的操作。

    linux下C语言操作sqlite3数据库封装

    linux下c语言操作sqlite3数据库,有sqlite3动态库、sqlite3的源码安装包、c语言操作sqlite3数据库的封装函数。保证C语言能够正常对sqlite3进行增、删、改、查操作。已经在多个项目上使用,绝对可行。

    C语言如何调用SQLite3中的接口

    这里有如何建立SQLite3的环境,以及如何调试SQLite3中接口的例子和Makefile文件内容

    linux下c语言操作sqlite3数据库.zip

    在C语言中创建一个简单的SQLite3操作示例,你可能需要以下步骤: 1. 打开数据库: ```c sqlite3 *db; int rc = sqlite3_open("mydatabase.db", &db); if (rc) { fprintf(stderr, "Can't open database: %s\n", ...

    C语言版sqlite3源文件.rar

    在C语言项目中使用SQLite3,开发者需要将sqlite3.c编译到他们的可执行文件中,或者链接到已经编译好的SQLite3库。由于sqlite3.h包含所有的接口定义,所以任何使用SQLite3的C代码都必须包含这个头文件。 开发过程中...

    c语言版sqlite的数据库访问

    6. 数据操作:在C语言中,使用SQLite进行数据操作涉及内存管理和类型转换。例如,将C语言的数据(如字符串、整数)转换为SQLite可以理解的格式,以及从结果集中提取数据后,转换回C语言的数据类型。 7. 并发控制:...

    sql_task.zip_C语言 sqlite3_c控制sqlite3_seatgof_wayu6x

    SQLite3是一个轻量级、自包含的数据库引擎,非常适合在嵌入式系统和移动应用中使用。它提供了SQL接口,允许程序员通过C语言或其他支持的编程语言进行数据库操作。 首先,我们需要了解C语言中的SQLite3 API。SQLite3...

    sqlite3 C语言

    在C语言中,我们通常使用预处理宏定义来初始化数据库连接、准备SQL查询语句、执行查询以及处理结果集。以下是一段示例代码,演示了如何读取数据并将其存储到二维数组中: ```c #include #include #include #...

    vs2010中mfc使用sqlite3

    VS2010中MFC使用SQLite3 ...本文详细讲述了如何在VS2010中使用MFC框架结合SQLite3数据库进行开发,包括下载SQLite3源代码、创建DLL文件、添加sqlite.lib文件、使用extern “C”语句、打开数据库、执行SQL语句等操作。

    sqlite3 C语言接口

    SQLite3 C 语言接口是 SQLite3 数据库管理系统提供的一种编程接口,允许 C 语言程序员使用 SQLite3 数据库。该接口提供了一系列函数和数据结构,用于创建、操作和管理 SQLite3 数据库。 快速入门 SQLite3 C 语言...

    基于TCP/IP和Sqlite3数据库的网络通讯录

    - Sqlite3是一个轻量级的嵌入式数据库,无需单独的服务器进程,可以直接在应用程序中使用。在这个通讯录项目中,Sqlite3作为本地数据存储的主要工具,用于保存联系人的各项信息,如姓名、电话、邮箱等。 - 使用...

    linux下c语言sqlite学生成绩管理系统

    3. **SQLite**:SQLite是一个轻量级的嵌入式数据库,它不需要单独的服务器进程,可以直接在应用程序中使用。在学生成绩管理系统中,SQLite用于存储学生信息和成绩,提供可靠的持久化数据存储。 4. **GTK+**:这是一...

    SQLite_C语言接口.pdf

    在SQLite的C语言接口中,sqlite3_stmt用于存储和管理预编译的SQL语句,它可以有效地提高SQL语句的执行效率。sqlite3_exec是一个执行SQL语句的函数,它不需要将SQL语句编译为sqlite3_stmt对象,适合执行不返回数据的...

    cpp-使用c对sqlite3的简单封装实现了基本的增删改查功能

    SQLite3是一个轻量级的、自包含的、无服务器的SQL数据库引擎,适用于嵌入式应用,无需单独的服务器进程,非常适合在资源有限的环境中使用。 首先,我们需要了解SQLite3的API接口。SQLite3提供了一系列的C语言函数,...

Global site tag (gtag.js) - Google Analytics