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

MFC下支持中文的SQLite3封装类使用

SQLite3是个非常不错的轻量级开源数据库,完全0配置。美中不足是它是c代码写的,mfc里使用稍有不便,终于在CP上找到了一个很好的对SQLite3进行封装的类,原文地址在这里。本文所有代码及

SQLite3是个非常不错的轻量级开源数据库,完全0配置。美中不足是它是c代码写的,mfc里使用稍有不便,终于在CP上找到了一个很好的对SQLite3进行封装的类,原文地址在这里。本文所有代码及SQLiteSpy在本站资源下载。这里记录在mfc中对话框模式下简单应用。

  1. 从cp上下载得到SQLite_Wrapper文件夹下的2个文件SQLite.cpp和SQLite.h
  2. 从SQLite3官网下下载源代码文件SQLite3.h,及编译好的库文件SQLite3.lib(从源代码编译成库文件参考这个文档)
  3. 将以上4个文件放入同一个文件夹SQLite_Wrapper下
  4. 新建MFC对话框应用程序,注意有一个选项“USE MFC”选择为“Use MFC in a Shared DLL”
  5. 将第3步的SQLite_Wrapper文件夹放到工程目录
  6. xxxDlg.h文件里写入
    #include "SQLite_Wrapper/SQLite.h"
    #pragma comment(lib,"SQLite_Wrapper/sqlite3.lib") 
    using namespace SQLite;

  7. xxxDlg.h文件里声明数据库类
    private:
    	Database m_db;


  8. xxxDlg.cpp文件里OnInitDialog()函数写入
    m_db.Open(_T("中文.db"));
    	m_db.ExecuteSQL(_T("CREATE TABLE 学生信息(学号 INTEGER PRIMARY KEY,年龄 INTEGER,班级 INTEGER,姓名 VARCHAR(12));" ));
    	m_db.ExecuteSQL(_T("INSERT INTO \"学生信息\" VALUES(NULL , 11, 1 , '明');"));
    	m_db.ExecuteSQL(_T("INSERT INTO \"学生信息\" VALUES(NULL , 12, 3 , '王');"));


  9. 编译运行对话框,确定关闭之后,工程目录文件夹下出现数据库文件
  10. SQLiteSpy 软件打开这个数据库db文件,得到中文字符的结果
======================================================================
2015.4.21下面做点稍微复杂的查询工作。
  1. 按照上面的内容创建一个内容多点的表
    	m_db.Open(_T("中文.db"));
    	m_db.ExecuteSQL(_T("CREATE TABLE 学生信息(学号 INTEGER PRIMARY KEY,年龄 INTEGER,班级 INTEGER,姓名 VARCHAR(12),成绩 INTEGER);" ));
    	m_db.ExecuteSQL(_T("INSERT INTO \"学生信息\" VALUES(NULL , 11, 1 , '小明', 90);"));
    	m_db.ExecuteSQL(_T("INSERT INTO \"学生信息\" VALUES(NULL , 12, 3 , '小王', 80);"));
    	m_db.ExecuteSQL(_T("INSERT INTO \"学生信息\" VALUES(NULL , 12, 2 , '小李', 70);"));
    	m_db.ExecuteSQL(_T("INSERT INTO \"学生信息\" VALUES(NULL , 11, 4 , '小张', 75);"));
    	m_db.Close();

  2. 结果是这样
  3. 下面要用到这个类的查询语句
    Table QuerySQL( LPCTSTR strSQL );
    TablePtr QuerySQL2( LPCTSTR strSQL );//返回的是查询结果表的指针
    

  4. 这里查询年龄=12的信息,先在.h里声明
    	TablePtr m_Table;
    	Table* m_pTable;
    cpp里写
    	m_Table = m_db.QuerySQL2(_T("SELECT * FROM 学生信息 WHERE 年龄=12"));
    	m_pTable = m_Table.m_pTable;//m_pTable指向查询结果
    	for (int i=0;iGetRowCount();i++)
    	{
    		m_DBList.InsertItem(i,m_pTable->GetValue(0));
    		m_DBList.SetItemText(i,	1,	m_pTable->GetValue(1));
    		m_DBList.SetItemText(i,	2,	m_pTable->GetValue(2));
    		m_DBList.SetItemText(i,	3,	m_pTable->GetValue(3));
    		m_DBList.SetItemText(i,	4,	m_pTable->GetValue(4));
    
    		m_pTable->GoNext();
    	}
    	

  5. 可以得到结果
  6. END


推荐阅读
  • 本文介绍如何使用 Python 的 DOM 和 SAX 方法解析 XML 文件,并通过示例展示了如何动态创建数据库表和处理大量数据的实时插入。 ... [详细]
  • 如何在Java中使用DButils类
    这期内容当中小编将会给大家带来有关如何在Java中使用DButils类,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。D ... [详细]
  • php更新数据库字段的函数是,php更新数据库字段的函数是 ... [详细]
  • 本文详细介绍了MySQL数据库的基础语法与核心操作,涵盖从基础概念到具体应用的多个方面。首先,文章从基础知识入手,逐步深入到创建和修改数据表的操作。接着,详细讲解了如何进行数据的插入、更新与删除。在查询部分,不仅介绍了DISTINCT和LIMIT的使用方法,还探讨了排序、过滤和通配符的应用。此外,文章还涵盖了计算字段以及多种函数的使用,包括文本处理、日期和时间处理及数值处理等。通过这些内容,读者可以全面掌握MySQL数据库的核心操作技巧。 ... [详细]
  • WhenImtryingtorunthefollowing:当我试图运行以下内容时:ContentValuescvnewContentValues();cv ... [详细]
  • SQLite–CONSTRAINTS(约束)约束是数据列在表上执行的规则。这些是用来限制的数据类型可以进入一个表。这样可以确保数据的准确性和可靠性在数据库中。    级或表级约束可 ... [详细]
  • importpymysql#一、直接连接mysql数据库'''coonpymysql.connect(host'192.168.*.*',u ... [详细]
  • 数据类型和操作数据表2.1MySQL类型之整型2.2MySQL数据类型之浮点型2.3日期时间型DATE1支持时间:1000年1月1日~9999年12月31日DATETIME ... [详细]
  • 本文详细介绍了 InfluxDB、collectd 和 Grafana 的安装与配置流程。首先,按照启动顺序依次安装并配置 InfluxDB、collectd 和 Grafana。InfluxDB 作为时序数据库,用于存储时间序列数据;collectd 负责数据的采集与传输;Grafana 则用于数据的可视化展示。文中提供了 collectd 的官方文档链接,便于用户参考和进一步了解其配置选项。通过本指南,读者可以轻松搭建一个高效的数据监控系统。 ... [详细]
  • MySQL Decimal 类型的最大值解析及其在数据处理中的应用艺术
    在关系型数据库中,表的设计与SQL语句的编写对性能的影响至关重要,甚至可占到90%以上。本文将重点探讨MySQL中Decimal类型的最大值及其在数据处理中的应用技巧,通过实例分析和优化建议,帮助读者深入理解并掌握这一重要知识点。 ... [详细]
  • PTArchiver工作原理详解与应用分析
    PTArchiver工作原理及其应用分析本文详细解析了PTArchiver的工作机制,探讨了其在数据归档和管理中的应用。PTArchiver通过高效的压缩算法和灵活的存储策略,实现了对大规模数据的高效管理和长期保存。文章还介绍了其在企业级数据备份、历史数据迁移等场景中的实际应用案例,为用户提供了实用的操作建议和技术支持。 ... [详细]
  • 在使用 Cacti 进行监控时,发现已运行的转码机未产生流量,导致 Cacti 监控界面显示该转码机处于宕机状态。进一步检查 Cacti 日志,发现数据库中存在 SQL 查询失败的问题,错误代码为 145。此问题可能是由于数据库表损坏或索引失效所致,建议对相关表进行修复操作以恢复监控功能。 ... [详细]
  • 本文详细介绍了在 Oracle 数据库中使用 MyBatis 实现增删改查操作的方法。针对查询操作,文章解释了如何通过创建字段映射来处理数据库字段风格与 Java 对象之间的差异,确保查询结果能够正确映射到持久层对象。此外,还探讨了插入、更新和删除操作的具体实现及其最佳实践,帮助开发者高效地管理和操作 Oracle 数据库中的数据。 ... [详细]
  • 在MFC开发过程中,利用Windows内置的文件对话框可以显著提高文件操作的效率。本文总结了使用文件对话框进行文件选择和处理的经验,详细介绍了相关API的调用方法和参数设置,如`CFileDialog`类的使用、结构体`OPENFILENAME`的配置以及如何获取选中的文件路径。通过这些技巧,开发者可以快速实现文件的打开、保存等功能,提升应用程序的用户体验。 ... [详细]
  • 我正在一个涉及SQLite的项目中,我只有一个数据库文件,现在我正在测试我的应 ... [详细]
author-avatar
z235235_795
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有