本文目录一览:
C语言访问SQLite数据库报错
我用 sqlite3.7.10 都没有任何问题,不过我没试过楼主直接用 dos 的这个方法。 另外就是自己做的 lib 文件要放倒 lib 文件夹里,sqlite3.dll 文件要放到 system32 文件夹里,64 位操作系统要放到 syswow64 文件夹里,这里要注意并不是每个版本的 sqlite3.dll 文件都适合自己的机器,我也是试了好多次才成功。 不知道能不能帮到你,刚才是我的全部理解了。
怎么用C语言更新mysql中的数据?
更改数据库值 和语言关系不大,这是对数据库的操作 你只需按照 mysql 操作方法 update 表 set 字段=新值 where 条件
如 id=1;
就可以更改数据库内某个指定的值了。至于怎么显示 怎么赋值 那些才是语言的事情,只要对数据库数据的操作 都是 数据库的事情
如何在Linux下用C/C++语言操作数据库sqlite3
SQLite数据库特点
- SQLite 数据库是开源的嵌入式数据库,无需独立的数据库引擎,直接嵌入到应用程序进程中,因此,通过 API,应用程序可以直接操作它。
- 事务的处理是原子的,一致的,独立的,可持久化的 (ACID),即使在系统崩溃和掉电后。
- SQLite 数据库通过独占性与共享锁来实现事务的独立处理。
- 一个单独的跨平台的磁盘文件就能够存储一个数据库。
- 能支持 2TB 级的数据。
- 自包含,无外部依赖性。
- 支持 NULL,INTEGER, NUMERIC, REAL, TEXT 和 BLOG 等数据类型。
- SQLite 数据库没有用户帐户的概念。数据库的权限仅依赖于文件系统。
SQLite数据库的基本操作
- 建立数据库
在当前目录下建立了名为sqlite3 data.sqlite3
data.sqlite3
的数据库。 - 建立数据表
建立了名为create table call_list( id INTEGER PRIMARY KEY, type NUMERIC, telnum NUMERIC, bttime TEXT, tcount NUMERIC, charge_rate NUMERIC, charge_sum NUMERIC );
call_list
的数据表,有 7 个字段,分别为id
,type
,telnum
,bttime
,tcount
,charge_sum
,charge_rate
。 - 向数据表中插入数据
insert into call_list values($num, 1, 2, 'new', 4, 5, 6);
- 查询数据表中的数据
select * from call_list;
- 修改 call_list 表中的数据
update call_list set id=00001000 where id=10001;
- 删除表中的数据记录
delete from call_list where id=1000;
- SQLite 中的其它常用命令
.tables
- 列出所有的数据库中的数据表.schema tablename
- 列出指定数据表的结构.quit
- 离开数据库
- SQLite 数据库的导入与导出
a. 将
data.sqlite
数据库的数据全部导出:
这样,数据就保存在sqlite3 data.sqlite .output dd.sql .dump
dd.sql
的文件中,注意这个文件不是数据库,而是 SQL 语句。然后再把这些数据导入到另外一个数据库data1.sqlite
数据库中。
这样,数据就从sqlite3 data1.sqlite .read dd.sql
data.sqlite
数据库复制到data1.sqlite
数据库中去了。 b. 将数据表中的数据导出到a.txt
中去。
c. 将导出的表中的数据导入到另一个数据库的新建的表中去如:当从.output a.txt select * from call_list;
data.sqlite
中的call_list
表中导出了数据,再导入到另外一个数据库表call
中去。首先建立表call
。然后:.import a.txt call
C语言操作Sqlite数据库API
int sqlite3_open(const char *filename, sqlite3 **ppdb);
第一个参数用来指定数据库文件名。第二个参数是一个数据库标识符指针。如果打开数据库成功,则返回 0,否则返回一个错误代码。int sqlite3_close(sqlite3 *);
传递的参数是数据库标识符指针用来关闭数据库,操作成功是返回 0,否则返回一个错误代码。int sqlite3_errcode(sqlite3 *db);
const char *sqlite3_errmsg(sqlite3 *db);
const char *sqlite3_errmsg16(sqlite3 *db);
这三个函数都是返回错误信息,第一个函数返回的是最近调用数据库接口的错误代码,第二,第三个函数是返回最近调用数据库接口的错误信息。第二个函数返回的错误信息是用 UTF-8 编码的,第三个函数返回的错误信息是用 UTF-16 编码的。int sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, **errmsg);
这个函数非常重用,是用来执行 SQLite 数据库的 SQL 语句的。第一个参数是 sqlite 数据库标识符指针。第二个参数是要执行的 SQL 语句。第三个参数是一个回调函数,在执行查询操作时用到,其它的操作可以传空值即 NULL。第四个参数是传递给回调函数第一个参数的实参。第五个参数是一个错误信息。 回调函数:
第一个参数是从int callback(void *, int argc, char **argv, char **cname);
sqlite3_exec
传递过来的参数,可以为任意的类型。第二个参数是查询的列数。第三个参数是查询结果集的值。第四个参数是列名。int sqlite3_get_table(sqlite3 *db, const char *sql, char ***result, int *row, int *col, char **errmsg);
这个函数主要是用来查询的。第一个参数是数据库描述符指针。第二个参数是 SQL 语句。第三个参数是查询的结果集。第四个参数是结果集中的行数。第五个参数是结果集中的列数。第六个参数是错误信息。它查询出的行数是从字段名开始的。即第 0 行是字段名。
实例
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h>
int _call_back(void* arg, int argc, char** argv, char** cname);
int main() {
int res;
const char* dbfile = "data.sqlite1";
char* errmsg = NULL;
sqlite3* db;
res = sqlite3_open(dbfile, &db);
if (res != 0) {
perror("数据库打开失败");
exit(EXIT_FAILURE);
}
// 创建一张数据表
const char* sqlcreate = "create table call_list(id INTEGER PRIMARY KEY, type NUMERIC, telnum NUMERIC, bttime TEXT, tcount NUMERIC, charge_rate NUMERIC, charge_sum NUMERIC)";
res = sqlite3_exec(db, sqlcreate, NULL, NULL, &errmsg);
if (res != 0) {
perror("建立数据表失败");
exit(EXIT_FAILURE);
}
// 插入100000条数据
int num = 0;
struct timeval tv;
gettimeofday(&tv, NULL);
long old = tv.tv_sec;
while (num < 100000) {
const char* sqlinsert = "insert into call_list values($num, 1, 2, 'new', 4, 5, 6)";
res = sqlite3_exec(db, sqlinsert, NULL, NULL, &errmsg); // 插入时不需要用到回调函数
if (res != 0) {
perror("插入失败");
exit(EXIT_FAILURE);
}
num++;
}
gettimeofday(&tv, NULL);
printf("插入100000条数据的时间为:%d秒\n", (tv.tv_sec - old));
// 更新
const char* sqlupdate = "update call_list set id=00001000 where id=10001";
res = sqlite3_exec(db, sqlupdate, NULL, NULL, &errmsg);
if (res != 0) {
perror("更新数据失败");
exit(EXIT_FAILURE);
}
// 删除
const char* sqldelete = "delete from call_list where id=1000";
res = sqlite3_exec(db, sqldelete, NULL, NULL, &errmsg);
if (res != 0) {
perror("删除数据失败");
exit(EXIT_FAILURE);
}
// 查询
const char* sqlquery = "select * from call_list";
res = sqlite3_exec(db, sqlquery, _call_back, NULL, &errmsg);
if (res != 0) {
printf("%s\n", errmsg);
perror("执行失败\n");
exit(EXIT_FAILURE);
}
res = sqlite3_close(db);
if (res != 0) {
perror("数据库关闭失败");
exit(EXIT_FAILURE);
}
exit(EXIT_SUCCESS);
}
int _call_back(void* arg, int argc, char** argv, char** cname) {
int i;
// 二重指针可以看成指针数组
for (i = 0; i < argc; i++) {
printf("%s = %s\n", cname[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
用C语言做个sqlite数据库~
- 打开 VC 新建一个“Win32 Dynamic-Link Library”工程,命名为:
sqlite3
- 在接下来的对话框中选择 "An empty DLL project", 点 FINISH-OK
- 将源码中所有的
*.c
*.h
*.def
复制到工程文件夹下 - 在工程的 Source File 中添加你下载到的 SQLite 源文件中所有
*.c
文件,注意这里不要添加shell.c
和tclsqlite.c
这两个文件。 - 将 SQLite 源文件中的
sqlite3.def
文件添加到在工程的 Source File 中 - 在 Header File 中添加你下载到的 SQLite 源文件中所有
*.h
文件 - 开始编译, 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... -> Directories,在下面的 Directories 选项中输入你的 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\n", sqlite3_errmsg(db));
sqlite3_close(db);
return (1);
} else {
printf("You have opened a sqlite3 database named zieckey.db successfully!\nCongratulations! Have fun ! ^-^\n");
}
// 其他数据库操作...
sqlite3_close(db);
return 0;
}