2019独角兽企业重金招聘Python工程师标准>>>

需要使用sqlite里的password对某个字段进行加密,由于使用的sqlite是由QT封装好的QSqlDatabase,没有发现加载扩展函数的方法,所以自己实现了一个。

在网上也没找到相应的参考,就自己查官方文档解决了。本篇文章主要是sqlite如何加载外部的函数,并没有password函数的实现,我将写好的函数生成了一个动态库,由程序动态加载。

#include <iostream>
#include <QString>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlDatabase>
#include <QtSql/QSqlQuery>
#include <QtSql/QSqlError>
#include <QtSql/QSqlDriver>
#include <QVariant>
#include <sqlite3.h>
#include <string.h>
using namespace std;void insert_database(QSqlDatabase& database,QString name)
{QSqlQuery query(database);if(!query.exec("insert into data(name) values(password('"+name+"') )"))cout<<query.lastError().text().toStdString()<<std::endl;elsedatabase.commit();
}int main()
{QSqlDatabase database=QSqlDatabase::addDatabase("QSQLITE");database.setDatabaseName("data.db");if(!database.open()){cout<<"open database failure"<<std::endl;return 0;}QVariant handle=database.driver()->handle();if(!handle.isValid()){cout<<"handle not valid"<<endl;return 0;}sqlite3* sqlhandle=*static_cast<sqlite3**>(handle.data());char * error=(char*)sqlite3_malloc(1024);sqlite3_enable_load_extension(sqlhandle,1);if(SQLITE_OK==sqlite3_load_extension(sqlhandle,"/home/quanwei/desktop/my-documents/code/qt/loadsqlitefunction/password.so",0,&error));elsecout<<"error: "<<error<<std::endl;sqlite3_free(error);insert_database(database,"hello");database.close();return 0;
}

数据库结构也放出来参考

CREATE TABLE data(id integer primary key,name text);

此程序用到的库的支持:
    QtCore,QtSql,sqlite3

具体接口官方文档有说明

Loading An Extension An SQLite extension is a shared library or DLL. To load it, you need to supply SQLite with the name of the file containing the shared library or DLL and an entry point to initialize the extension. In C code, this information is supplied using the sqlite3_load_extension() API. See the documentation on that routine for additional information. Note that different operating systems use different filename suffixes for their shared libraries. Windows use ".dll", Mac uses ".dylib", and most unixes other than mac use ".so". If you want to make your code portable, you can omit the suffix from the shared library filename and the appropriate suffix will be added automatically by the sqlite3_load_extension() interface.

不过由于默认load_extension是处于关闭状态,所以需要调用sqlite3_enable_load_extension打开扩展功能

在sqlite3的shell里可以通过执行

sqlite3> .load ./password

来加载一个动态库函数,但是由于扩展函数没有储存在数据库中,所以每次打开这个数据库中都要加载一次才能使用自定义函数。

参考:https://www.sqlite.org/loadext.html

转载于:https://my.oschina.net/000quanwei/blog/358979

qt实现-给SQLITE添加自定义函数相关推荐

  1. sqlite+php+函数大全,Sqlite 常用函数 推荐

    Sqlite 常用函数 推荐 更新时间:2009年09月25日 23:21:57   作者: Sqlite 常用函数,在实际开发中,经常遇的到. 1 .打开数据库: 说明:打开一个数据库,文件名不一定 ...

  2. Hadoop3集群搭建之——hive添加自定义函数UDTF (一行输入,多行输出)

    上篇: Hadoop3集群搭建之--虚拟机安装 Hadoop3集群搭建之--安装hadoop,配置环境 Hadoop3集群搭建之--配置ntp服务 Hadoop3集群搭建之--hive安装 Hadoo ...

  3. sqlite 中函数--nullif()、ifnull()、strftime()及时间格式函数

    记录一下,SQLite中nullif和ifnull的区别: nullif(null,'') --输出null nullif('','') --输出null nullif('t','t') --输出nu ...

  4. 05黑马QT笔记之自定义槽函数

    05黑马QT笔记之自定义槽函数 1 自定义槽函数其实不难,没什么好说的,注意以下几点便可. 自定义参函数注意事项(Qt5): * 1)自定义槽函数可以是类成员函数(用得最多).全局普通函数.静态函数. ...

  5. 彻底搞懂SQLite回调函数查询

    文章目录 一.理解回调函数 1.回调函数流程 2.回调函数实例 3.回调函数方式 二.sqlite3_exec的回调函数 callback 1.先看sqlite3_exec() 2.在看回调callb ...

  6. Qt自适应图片之scaled()函数详解

    如何在改变窗口组件的情况下改变窗口背景图片的大小,我们通常会使用Qt自带的scaled()函数:QImage.QPixmap等绘图设备类都提供scaled()函数. scaled()是一个重载函数,按 ...

  7. Qt 自适应图片之scaled()函数详解

    如何在改变窗口组件的情况下改变窗口背景图片的大小,我们通常会使用Qt自带的scaled()函数:QImage.QPixmap等绘图设备类都提供scaled()函数. scaled()是一个重载函数,按 ...

  8. Qt关于窗口关闭触发函数/信号

    方法一. 窗口右上角的X按键会导致其在不给出任何提示的情况下直接退出, 当点击右上角的x按键时,会触发Qt中的一个事件处理函数:void QWidget::closeEvent ( QCloseEve ...

  9. 如何在Excel中添加自定义函数(以计算AUC为例)

    Excel是一个常用的数据记录与统计的工具,但是我们所熟知的可能仅仅是它的表格,画直方图等功能.它其实还有更为强大的功能,即添加自定义函数,方便自己统计.下面为简单的介绍,以Excel2016为例: ...

最新文章

  1. jQuery+Ajax+PHP 制作简单的异步数据传输(测试用户名是否可用)
  2. 南达科他州立大学计算机科学,关于举行南达科他州立大学Srinivas Janaswamy博士学术报告的通知...
  3. 合并多个commit记录
  4. php输出源文件,apt-get 按照php7后apache 输出php源文件
  5. sql 跨数据库 连表
  6. c 语言程序设计(清华大学郑莉),清华大学 C++程序设计语言 45 郑莉 视频教程
  7. WebM文件格式标准
  8. Hibernate二级缓存适用场景
  9. Sketch使用教程(四)
  10. OpenStack之VM东西南北向流量分析
  11. 如何强制解锁或删除被占用的文件或文件夹 - ForceDelete绿色强制文件删除工具
  12. 上传图片的方法(大白话讲解)
  13. 云原生背景看这一篇就够了
  14. fastadmin框架里基于x-editable实现的表格无刷新行内编辑功能的插件的‘datetime‘时间类型无法使用的解决方法
  15. [CodeForces757E]Bash Plays with Functions
  16. linux网络流量走高,linux-流量异常高怎么处理
  17. 随机宏基因组测序数据质量控制和去宿主的分析流程和常见问题
  18. Chris16堂外教实用口语课-让你的英语脱口而出
  19. RN 原生模块及组件入门
  20. 性能优化之YUICompressor压缩JS、CSS

热门文章

  1. (0098)iOS开发之应用间的分享系列(3)
  2. calendar获取月份少一个月_6月份,花园小学、铁岭小学等哈尔滨南岗校区部分二手房量价齐涨...
  3. PHP标记风格,编码规范
  4. JMeter断言介绍
  5. [洛谷P3387]【模板】缩点
  6. 面试题39:二叉树的深度、判断二叉树是不是平衡
  7. Docker大行其道—镜像
  8. iOS开篇——UI之UIStepper (计步器)
  9. 2、从汇编语言到Windows内核编程笔记(2)
  10. 滤波电容、去耦电容、旁路电容作用