c语言sqlite3数据库的使用(如何使用SQLite)

:暂无数据 2026-08-24 18:40:01 0

c语言sqlite3数据库的使用(如何使用SQLite)

本篇文章给大家谈谈c语言sqlite3数据库的使用,以及如何使用SQLite对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

本文目录

如何使用SQLite

  SQLite3是目前最新的SQLite版本。可以从网站上下载SQLite3的源代码(本书使用的版本是sqlite-3.6.12.tar.gz)。
  解压缩后进入sqlite-3.6.12的根目录,首先命令“./configure”生成Makefile文件,接着运行命令“make”对源代码进行编译,最后运行命令“make install”安装SQLite3。安装完毕后,可以运行命令sqlite3查看SQLite3是否能正常运行,如下所示:
  # 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的具体操作如下所示:
  # 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文件中:
  # 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):
  # 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的结果如下所示:
  # 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的结果如下所示:
  # ./test
  exec success!
  # 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);
  }
  printf("\n");
  }
  }
  sqlite3_free_table(Result);
  sqlite3_close(db);
  return 0;
  }
  编译完成后,运行test的结果如下所示:
  # ./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的结果如下所示:
  # ./test
  query success!
  xiaohong | female | 19 |
  xiaoxue | female | 18 |
  xiaoliu | male | 20 |
  daobao | male | 24 |
  在程序中访问SQLite3数据库时,要注意C API的接口定义和数据类型是否正确,否则会得到错误的访问结果。

sqlite3 怎么查询数据库中所有的表 用C语言实现

SELECT name FROM sqlite_master
WHERE type=’table’
ORDER BY name;
在C语言中用这个查询语句

OK,关于c语言sqlite3数据库的使用和如何使用SQLite的内容到此结束了,希望对大家有所帮助。

c语言sqlite3数据库的使用(如何使用SQLite)

本文编辑:admin

更多文章:


androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

androidapp源码免费下载(如何实现APK的反编译得到APK的源码)

本篇文章给大家谈谈androidapp源码免费下载,以及如何实现APK的反编译得到APK的源码对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 18:00

security的反义词(risk的反义词)

security的反义词(risk的反义词)

大家好,今天小编来为大家解答以下的问题,关于security的反义词,risk的反义词这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 15:40

二郎神杨戬简笔画(二郎神怎么画)

二郎神杨戬简笔画(二郎神怎么画)

本篇文章给大家谈谈二郎神杨戬简笔画,以及二郎神怎么画对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:50

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

service pack 3(操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思)

大家好,关于service pack 3很多朋友都还不太明白,不过没关系,因为今天小编就来为大家分享关于操作系统版本升级(SP) Service Pack 3当中的“Service Pack 3”是什么意思的知识点,相信应该可以解决大家的一

2026年9月22日 10:20

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

html代码怎么写大佬教程(html网页的题来个大佬,写代码,题目在图上)

本篇文章给大家谈谈html代码怎么写大佬教程,以及html网页的题来个大佬,写代码,题目在图上对应的知识点,希望对各位有所帮助,不要忘了收藏本站喔。

2026年9月22日 10:10

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

结构体内又一个struct(c++ 在结构体中再嵌入一个结构体如何调用)

本篇文章给大家谈谈结构体内又一个struct,以及c++ 在结构体中再嵌入一个结构体如何调用对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 09:40

next是什么意思英语(next是什么单词)

next是什么意思英语(next是什么单词)

本篇文章给大家谈谈next是什么意思英语,以及next是什么单词对应的知识点,文章可能有点长,但是希望大家可以阅读完,增长自己的知识,最重要的是希望对各位有所帮助,可以解决了您的问题,不要忘了收藏本站喔。

2026年9月22日 07:50

美国参议院人数(美国每个州的议员人数取决于什么)

美国参议院人数(美国每个州的议员人数取决于什么)

大家好,今天小编来为大家解答以下的问题,关于美国参议院人数,美国每个州的议员人数取决于什么这个很多人还不知道,现在让我们一起来看看吧!

2026年9月22日 05:20

高中信息技术python(高考信息技术用的是什么语言)

高中信息技术python(高考信息技术用的是什么语言)

今天给各位分享高考信息技术用的是什么语言的知识,其中也会对高考信息技术用的是什么语言进行解释,如果能碰巧解决你现在面临的问题,别忘了关注本站,现在开始吧!

2026年9月22日 02:50

cocos creator中文(cocoscreator和cocoscreator3d的区别)

cocos creator中文(cocoscreator和cocoscreator3d的区别)

各位老铁们好,相信很多人对cocos creator中文都不是特别的了解,因此呢,今天就来为大家分享下关于cocos creator中文以及cocoscreator和cocoscreator3d的区别的问题知识,还望可以帮助大家,解决大家的

2026年9月22日 02:30

最近更新

东莞新网站如何快速排名
2026-09-22 21:14:31 浏览:0
seo数据分析的含义是什么?
2026-09-22 21:12:56 浏览:0
热门文章

wait for you杨和苏(大家听下(wait for you)这首英文歌的开头那段音乐)
2026-06-13 16:20:04 浏览:22
刷关键字排名怎么操作最有效?
2026-09-14 20:02:13 浏览:14
oppo a9拆机教程(oppoa9拆机教程)
2026-06-13 10:40:02 浏览:12
标签列表