博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
qt实现-给SQLITE添加自定义函数
阅读量:6305 次
发布时间:2019-06-22

本文共 1991 字,大约阅读时间需要 6 分钟。

hot3.png

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

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

 

#include 
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;void insert_database(QSqlDatabase& database,QString name){ QSqlQuery query(database); if(!query.exec("insert into data(name) values(password('"+name+"') )")) cout<
<
handle(); if(!handle.isValid()) { cout<<"handle not valid"<
(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)); else cout<<"error: "<
<
数据库结构也放出来参考
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

你可能感兴趣的文章
segment
查看>>
获取鼠标的原始移动值
查看>>
Linux信号 编程
查看>>
有关滚动与位置
查看>>
Box2D自定义重力
查看>>
chpasswd
查看>>
mysqldump --single-transaction 和--lock-tables参数详解
查看>>
android 数据库_sql语句总结
查看>>
python购物车
查看>>
解决python2和python3的pip冲突
查看>>
面试/编程
查看>>
linux每日命令(16):head命令
查看>>
公司内部分享【富有成效的每日站会】总结
查看>>
打造一个上传图片到图床利器的插件(Mac版 开源)
查看>>
iOS横竖屏
查看>>
thinkphp判断更新是否成功
查看>>
Do While ... Loop 与 Do Until ... Loop 的区别
查看>>
【Linux】查询某个字符串出现次数
查看>>
高效使用jquery之一:请使用'On'函数
查看>>
冲刺第一周第三天
查看>>