热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

vc++调用sqlite

1.下载对应的库,源码,工具源码: http:www.sqlite.org2016sqlite-amalgamation-3150200.zip库: http:www.sqlite

1.下载对应的库,源码,工具

源码: http://www.sqlite.org/2016/sqlite-amalgamation-3150200.zip

库: http://www.sqlite.org/2016/sqlite-dll-win32-x86-3150200.zip

工具: http://www.sqlite.org/2016/sqlite-tools-win32-x86-3150200.zip

2.生成sqlite对应的lib库

打开vc的编译环境命令行,切换目录到sqlite3.def库文件所在的目录,运行如下命令

LIB /MACHINE:IX86 /DEF:sqlite3.def

生成:sqlite3.lib和sqlite3.exp

将源码中sqlite3.h,生成的sqlite3.lib和库中sqlite3.dll放入工程目录就可以用了

3.vc调用

建立各控制台程序,修改主程序代码如下,转自网上,做了部分修改

生成的数据库是test.db

// testSqlite.cpp : 定义控制台应用程序的入口点。
//

#include
"stdafx.h"
#include

#include
"sqlite3.h"
#pragma comment(lib, "sqlite3.lib")
int column_names_printed = 0;
void print_row(int n_values, char** values)
{
int i;
for (i = 0; i i) {
printf("%10s", values[i]);
}
printf(
"\n");
}
int print_result(void* data, int n_columns, char** column_values, char** column_names)
{
if(!column_names_printed){
print_row(n_columns, column_names);
column_names_printed
= 1;
}
print_row(n_columns, column_values);
return 0;
}
int _tmain(int argc, _TCHAR* argv[])
{
sqlite3
*db = NULL;
char* errMsg = NULL;
int rc = sqlite3_open("test.db", &db);
if(rc){
fprintf(stderr,
"Can't open database: %s\n", sqlite3_errmsg(db));
sqlite3_close(db);
exit(
1);
return 1;
}
else{
printf(
"open test.db successfully!\n");
}
rc
= sqlite3_exec(db, "BEGIN TRANSACTION;", NULL, NULL, NULL);
rc
= sqlite3_exec(db,
"CREATE TABLE students(number varchar(10), name varchar(10), sex varchar(6), age varchar(2));",
NULL, NULL, NULL);
rc
= sqlite3_exec(db,
"INSERT INTO students VALUES('00001', 'Mary', 'female', '15');"
"INSERT INTO students VALUES('00002', 'John', 'male', '16');"
"INSERT INTO students VALUES('00003', 'Mike', 'male', '15');"
"INSERT INTO students VALUES('00004', 'Kevin', 'male', '17');"
"INSERT INTO students VALUES('00005', 'Alice', 'female', '14');"
"INSERT INTO students VALUES('00006', 'Susan', 'female', '16');"
"INSERT INTO students VALUES('00007', 'Christina', 'female', '15');"
"INSERT INTO students VALUES('00008', 'Brian', 'male', '16');"
"INSERT INTO students VALUES('00009', 'Dennis', 'male', '14');"
"INSERT INTO students VALUES('00010', 'Daphne', 'female', '18');",
NULL, NULL,
&errMsg);
column_names_printed
= 0;
rc
= sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='female';", print_result, NULL, &errMsg);
column_names_printed
= 1;
printf(
"\n");
column_names_printed
= 0;
rc
= sqlite3_exec(db, "SELECT students.* FROM students WHERE sex='male';", print_result, NULL, &errMsg);
column_names_printed
= 1;
rc
= sqlite3_exec(db, "COMMIT TRANSACTION;", NULL, NULL, NULL);
printf(
"error code: %d\n", rc);
printf(
"error message: %s\n", errMsg);
sqlite3_close(db);
return 0;
}

4.查看

在控制台下运行工具里的sqlite3程序

打开数据库

sqlite3 test.db

 

设置显示模式

.head on

.mode column

 

查看所有的表

.tables

 

查看数据库的各个成员的结构

select * from sqlite_master;

 

查看表数据

select * from students;

 

退出

.quit


推荐阅读
  • Python使用SQLite1.sqlite3的安装python2.5.x以上版本默认自带sqlite3模块。2.链接sqlite3数据库```#导入sqlite3模块import ... [详细]
  • Java String与StringBuffer的区别及其应用场景
    本文主要介绍了Java中String和StringBuffer的区别,String是不可变的,而StringBuffer是可变的。StringBuffer在进行字符串处理时不生成新的对象,内存使用上要优于String类。因此,在需要频繁对字符串进行修改的情况下,使用StringBuffer更加适合。同时,文章还介绍了String和StringBuffer的应用场景。 ... [详细]
  • 解决Cydia数据库错误:could not open file /var/lib/dpkg/status 的方法
    本文介绍了解决iOS系统中Cydia数据库错误的方法。通过使用苹果电脑上的Impactor工具和NewTerm软件,以及ifunbox工具和终端命令,可以解决该问题。具体步骤包括下载所需工具、连接手机到电脑、安装NewTerm、下载ifunbox并注册Dropbox账号、下载并解压lib.zip文件、将lib文件夹拖入Books文件夹中,并将lib文件夹拷贝到/var/目录下。以上方法适用于已经越狱且出现Cydia数据库错误的iPhone手机。 ... [详细]
  • 《数据结构》学习笔记3——串匹配算法性能评估
    本文主要讨论串匹配算法的性能评估,包括模式匹配、字符种类数量、算法复杂度等内容。通过借助C++中的头文件和库,可以实现对串的匹配操作。其中蛮力算法的复杂度为O(m*n),通过随机取出长度为m的子串作为模式P,在文本T中进行匹配,统计平均复杂度。对于成功和失败的匹配分别进行测试,分析其平均复杂度。详情请参考相关学习资源。 ... [详细]
  • 动态规划算法的基本步骤及最长递增子序列问题详解
    本文详细介绍了动态规划算法的基本步骤,包括划分阶段、选择状态、决策和状态转移方程,并以最长递增子序列问题为例进行了详细解析。动态规划算法的有效性依赖于问题本身所具有的最优子结构性质和子问题重叠性质。通过将子问题的解保存在一个表中,在以后尽可能多地利用这些子问题的解,从而提高算法的效率。 ... [详细]
  • 高质量SQL书写的30条建议
    本文提供了30条关于优化SQL的建议,包括避免使用select *,使用具体字段,以及使用limit 1等。这些建议是基于实际开发经验总结出来的,旨在帮助读者优化SQL查询。 ... [详细]
  • 上图是InnoDB存储引擎的结构。1、缓冲池InnoDB存储引擎是基于磁盘存储的,并将其中的记录按照页的方式进行管理。因此可以看作是基于磁盘的数据库系统。在数据库系统中,由于CPU速度 ... [详细]
  • 如何搭建服务器环境php(2023年最新解答)
    导读:本篇文章编程笔记来给大家介绍有关如何搭建服务器环境php的相关内容,希望对大家有所帮助,一起来看看吧。本文目录一览:1、怎么搭建p ... [详细]
  • 有没有人用过sqlite?关于tablehasnocolumnnamedcolumn插入数据的时候报上边的错。问题是我明明有这一列。直接在sqlitedevoloper里执 ... [详细]
  • IhaveonedoubtinSqlite.dteTimeDataTypeisVarchar(200)inTablestructure.Iwanttogetresult ... [详细]
  • 图解redis的持久化存储机制RDB和AOF的原理和优缺点
    本文通过图解的方式介绍了redis的持久化存储机制RDB和AOF的原理和优缺点。RDB是将redis内存中的数据保存为快照文件,恢复速度较快但不支持拉链式快照。AOF是将操作日志保存到磁盘,实时存储数据但恢复速度较慢。文章详细分析了两种机制的优缺点,帮助读者更好地理解redis的持久化存储策略。 ... [详细]
  • 本文介绍了游标的使用方法,并以一个水果供应商数据库为例进行了说明。首先创建了一个名为fruits的表,包含了水果的id、供应商id、名称和价格等字段。然后使用游标查询了水果的名称和价格,并将结果输出。最后对游标进行了关闭操作。通过本文可以了解到游标在数据库操作中的应用。 ... [详细]
  • 自动轮播,反转播放的ViewPagerAdapter的使用方法和效果展示
    本文介绍了如何使用自动轮播、反转播放的ViewPagerAdapter,并展示了其效果。该ViewPagerAdapter支持无限循环、触摸暂停、切换缩放等功能。同时提供了使用GIF.gif的示例和github地址。通过LoopFragmentPagerAdapter类的getActualCount、getActualItem和getActualPagerTitle方法可以实现自定义的循环效果和标题展示。 ... [详细]
  • Hibernate延迟加载深入分析-集合属性的延迟加载策略
    本文深入分析了Hibernate延迟加载的机制,特别是集合属性的延迟加载策略。通过延迟加载,可以降低系统的内存开销,提高Hibernate的运行性能。对于集合属性,推荐使用延迟加载策略,即在系统需要使用集合属性时才从数据库装载关联的数据,避免一次加载所有集合属性导致性能下降。 ... [详细]
  • OpenCV4.5.0+contrib编译流程及解决错误方法
    本文介绍了OpenCV4.5.0+contrib的编译流程,并提供了解决常见错误的方法,包括下载失败和路径修改等。同时提供了相关参考链接。 ... [详细]
author-avatar
园园哚
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有