aardio用sqlite读写图片二进制数据

演示如何在aardio中使用sqlite存取控件上的图片数据。
本例中使用的是plus控件显示图片,也可以用picturebox控件。原理相同。

效果演示:

GIF 2020-03-21 21-13-23.gif

完整代码:

import win.ui;
/*DSG{{*/
var winform = win.form(text="aardio form";right=759;bottom=469)
winform.add(
btnClean={cls="button";text="清空控件上的图片";left=577;top=416;right=748;bottom=455;z=5};
btnOpen={cls="button";text="打开图片";left=10;top=416;right=181;bottom=455;z=2};
btnRead={cls="button";text="读取数据库图片到控件";left=388;top=416;right=559;bottom=455;z=4};
btnSave={cls="button";text="控件图片保存到数据库";left=199;top=416;right=370;bottom=455;z=3};
plus={cls="plus";left=5;top=6;right=751;bottom=402;edge=1;foreRepeat="scale";frame=1;z=1}
)
/*}}*/

import fsys.dlg;
import sqlite;

var db = sqlite("/testPic.db")

if( not db.existsTable("test") ){  
	db.exec( "CREATE TABLE test(pic blob);")  
}  

winform.btnOpen.oncommand = function(id,event){//打开
	var path = fsys.dlg.open('图片文件|*.bmp;*.jpg;*.png|所有文件|*.*|',"选择图片",,winform);
	if(path){
		winform.plus.foreground = path;
	}
}

winform.btnSave.oncommand = function(id,event){//保存
	if(winform.plus.getForeground()==null){
		return ; 
	}
	var ret = db.prepare("INSERT INTO test VALUES (@blobpic);" ).step(
 		//blobPic = string.load();
 		blobpic = raw.tostring(winform.plus.getForeground().saveToBuffer());
	);
	if(ret >= 100){
		win.msgbox("保存成功!");
	}
}

winform.btnRead.oncommand = function(id,event){//读取
	var ret,err = db.getTable("SELECT * FROM test ")
	if(!ret){
		win.msgbox(tostring(err));
		return ; 
	}
	if(#ret<1){
		win.msgbox("数据库中没有记录!");
		return ; 
	}
	//显示数据库里最后一条记录
	winform.plus.foreground = ret[#ret].pic;
	win.msgbox("读取成功!");
}

winform.btnClean.oncommand = function(id,event){
	winform.plus.foreground = null;
}

winform.show();
win.loopMessage();

关键代码:

db.prepare("INSERT INTO test VALUES (@blobpic);" ).step(
 	//blobPic = string.load();
 	blobpic = raw.tostring(winform.plus.getForeground().saveToBuffer());
);

使用命名参数:@参数 前面要加上 blob 关键字,来显式的告诉程序该字段(本例中为‘pic’字段)是二进制数据。
也可以使用string.load()函数直接将文件以二进制数据保存到数据库中。

猜你喜欢

转载自www.cnblogs.com/drunken-ostrich/p/12583619.html