- 浏览: 237681 次
- 性别:
- 来自: 南京
-
最新评论
-
baby8117628:
vc下mp3 IDv1和IDV2的读取 -
gezexu:
你好,我按照你的步骤一步步进行但是安装libvorbis的时候 ...
linux如何搭建强大的FFMPEG环境 -
ini_always:
帅哥,转载也把格式做好点,另外出处也要注明一下吧。。。
MP3文件格式解析
一直想找个嵌入式数据库来用用,几经辛苦,终于了解到有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, 成功了!
在一番衡量之后,决定选用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, 成功了!
发表评论
-
内存屏障
2010-02-26 11:03 1522处理器的乱序和并发执行 目前的高级处理器,为了提高内部逻辑元 ... -
函数调用堆栈分析
2010-02-26 10:53 1392理解调用栈最重要的两 ... -
mtrace检测内存泄露
2010-02-25 09:50 1106[url] http://math.acadiau.ca/AC ... -
c语言编程之字符串操作
2010-02-25 09:41 8781. //在s串中查找与s1相匹配的字符串,找到后用 ... -
linux C 链接库 so制作及调用[转]
2010-02-24 16:26 2598文章分类:C++编程 [文章作者:陈毓端 若转载请标注原文链 ... -
mtrace的使用
2010-02-24 16:02 1344对于内存溢出之类的麻烦可能大家在编写指针比较多的复杂的程序的时 ... -
单片机的C语言中位操作用法(转
2010-02-24 14:27 2225单片机的C语言中位操作用法 作者:郭天祥 在对单处机进 ... -
Linux下的itoa函数
2010-02-21 17:55 1788上篇文章说到linux需要it ... -
va_list、va_start、va_arg、va_end的原理与使用
2010-02-05 10:34 29241. 概述 由于在C语言中没有函数重载,解 ... -
快速排序(quickSort)
2010-02-04 10:50 8801. #include <stdio.h> ... -
C问题---itoa函数
2010-02-04 10:36 1074------------------------------ ... -
itoa函数及atoi函数
2010-02-04 10:35 1339C语言提供了几个标准库函数,可以将任意类型(整型、长整型、浮点 ... -
结构体零长度数组的作用
2010-02-04 10:21 1386在一些 C 语言编写的代码中,有时可以看到如下定义的结构: ... -
优化C代码常用的几招
2010-02-04 10:14 787性能优化方面永远注意8 ... -
我经常去的网站
2010-02-03 17:53 1643MFC相关网站 www.codeproject.com ht ... -
可重入函数与不可重入函数
2010-02-03 16:35 946原文地址:http://blog.chin ... -
linux线程池及其测试
2010-02-03 16:32 2374/*----------------------------- ... -
哈夫曼编码
2010-02-03 16:26 1326本文描述在网上能够找到的最简单,最快速的哈夫曼编码。本方法不使 ... -
优化变成了忧患:String.split引发的“内存泄露”
2010-02-01 17:39 1124一直赞叹Sun对待技术的 ... -
锁无关的(Lock-Free)数据结构——在避免死锁的同时确保线程
2010-01-26 14:47 915http://hi.baidu.com/%5F%E2%64%5 ...
相关推荐
代码中使用`sqlite3_errmsg()`获取错误信息,并通过`fprintf()`打印,确保在出现问题时能提供调试帮助。此外,`sqlite3_free()`用于释放内存,防止内存泄漏。 总之,这个文档提供了C语言实现SQLite3数据库查询的...
在C语言程序中使用SQLite,必须包含SQLite的头文件sqlite3.h,它包含了所有SQLite API的声明。这是编写SQLite操作程序的前提条件。 二、链接SQLite库文件 仅仅包含头文件是不够的,编译器还需要在链接阶段找到...
首先,让我们深入了解一下如何在C语言中封装SQLite3。这通常涉及到以下步骤: 1. **库的链接**:在Ubuntu环境下,你需要安装SQLite3的开发库,通过`sudo apt-get install libsqlite3-dev`命令完成。这样,编译器就...
SQLite3的API设计简洁,易于在C语言中使用。 压缩包内的文件列表提供了构建和使用SQLite3的必要组件: 1. `sqlite3.h`:这是SQLite3的头文件,包含了所有你需要在C程序中调用SQLite3函数的声明。你需要`#include`...
在Linux环境下,C语言与SQLite3数据库的交互是常见的数据管理任务。SQLite3是一个轻量级、嵌入式的关系型数据库管理系统,适用于多种操作系统,包括Linux。本项目着重讲解如何用C语言实现用户注册、登录功能,并进行...
对于单个插入,通常我们会使用`sqlite3_exec()`函数来执行诸如`INSERT INTO table_name VALUES (value1, value2, ...)`这样的SQL命令。每次调用该函数都会引发一次数据库事务,涉及I/O操作,这在大量数据插入时会...
cgi c语言中sqlite3的使用,调用sqlite3的api完成数据库的操作。
linux下c语言操作sqlite3数据库,有sqlite3动态库、sqlite3的源码安装包、c语言操作sqlite3数据库的封装函数。保证C语言能够正常对sqlite3进行增、删、改、查操作。已经在多个项目上使用,绝对可行。
这里有如何建立SQLite3的环境,以及如何调试SQLite3中接口的例子和Makefile文件内容
在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,开发者需要将sqlite3.c编译到他们的可执行文件中,或者链接到已经编译好的SQLite3库。由于sqlite3.h包含所有的接口定义,所以任何使用SQLite3的C代码都必须包含这个头文件。 开发过程中...
6. 数据操作:在C语言中,使用SQLite进行数据操作涉及内存管理和类型转换。例如,将C语言的数据(如字符串、整数)转换为SQLite可以理解的格式,以及从结果集中提取数据后,转换回C语言的数据类型。 7. 并发控制:...
SQLite3是一个轻量级、自包含的数据库引擎,非常适合在嵌入式系统和移动应用中使用。它提供了SQL接口,允许程序员通过C语言或其他支持的编程语言进行数据库操作。 首先,我们需要了解C语言中的SQLite3 API。SQLite3...
在C语言中,我们通常使用预处理宏定义来初始化数据库连接、准备SQL查询语句、执行查询以及处理结果集。以下是一段示例代码,演示了如何读取数据并将其存储到二维数组中: ```c #include #include #include #...
VS2010中MFC使用SQLite3 ...本文详细讲述了如何在VS2010中使用MFC框架结合SQLite3数据库进行开发,包括下载SQLite3源代码、创建DLL文件、添加sqlite.lib文件、使用extern “C”语句、打开数据库、执行SQL语句等操作。
SQLite3 C 语言接口是 SQLite3 数据库管理系统提供的一种编程接口,允许 C 语言程序员使用 SQLite3 数据库。该接口提供了一系列函数和数据结构,用于创建、操作和管理 SQLite3 数据库。 快速入门 SQLite3 C 语言...
- Sqlite3是一个轻量级的嵌入式数据库,无需单独的服务器进程,可以直接在应用程序中使用。在这个通讯录项目中,Sqlite3作为本地数据存储的主要工具,用于保存联系人的各项信息,如姓名、电话、邮箱等。 - 使用...
3. **SQLite**:SQLite是一个轻量级的嵌入式数据库,它不需要单独的服务器进程,可以直接在应用程序中使用。在学生成绩管理系统中,SQLite用于存储学生信息和成绩,提供可靠的持久化数据存储。 4. **GTK+**:这是一...
在SQLite的C语言接口中,sqlite3_stmt用于存储和管理预编译的SQL语句,它可以有效地提高SQL语句的执行效率。sqlite3_exec是一个执行SQL语句的函数,它不需要将SQL语句编译为sqlite3_stmt对象,适合执行不返回数据的...
SQLite3是一个轻量级的、自包含的、无服务器的SQL数据库引擎,适用于嵌入式应用,无需单独的服务器进程,非常适合在资源有限的环境中使用。 首先,我们需要了解SQLite3的API接口。SQLite3提供了一系列的C语言函数,...