搜索
查看: 3125|回复: 1

请教如何更新存储在sqlite里面的图片数据

[复制链接]

13

主题

73

帖子

635

积分

培训班

积分
635
发表于 2013-11-8 16:32:49 | 显示全部楼层 |阅读模式
本帖最后由 leisurely 于 2013-11-8 16:51 编辑

请教如何更新存储在sqlite里面的图片,我是使用了update语句,但是提示错误,请教要如何解决呢?谢谢!代码如下:


  1. import win.ui;
  2. import fsys.dlg
  3. import sqlite
  4. /*DSG{{*/
  5. var winform = ..win.form( bottom=399;parent=...;text="aardio Form";right=599 )
  6. winform.add(
  7. button={ bottom=233;right=458;left=335;top=187;z=2;text="更新数据库中的图片";cls="button" };
  8. picturebox={ bottom=247;right=292;border=1;autosize=1;top=66;z=1;left=57;notify=1;cls="picturebox" };
  9. button2={ bottom=122;right=458;left=335;top=76;z=3;text="图片存储到数据库";cls="button" };
  10. button3={ bottom=179;right=458;left=335;top=133;z=4;text="显示数据库的图片";cls="button" }
  11. )
  12. /*}}*/

  13. //创建数据库
  14. sqlConn = sqlite("/test-sqlite.db")

  15. //创建表
  16. if( not sqlConn.existsTable("film") ){  
  17.         sqlConn.exec( "create table [film](title);")  
  18. }  


  19. //将图片存储到图据库
  20. winform.button2.oncommand = function(id,event){       
  21.         var command = sqlConn.prepare("replace into film values (@title);" )
  22.         command.step(  
  23.                 title = string.load(files)
  24.         )           
  25. }


  26. //显示数据库里面的图片
  27. winform.button3.oncommand = function(id,event){
  28.         for title in sqlConn.each("select * from film") {
  29.                 winform.picturebox.image = title
  30.         }
  31. }


  32. //更新数据库中的图片,在执行这个更新的时候,提示出错了,更新不了数据库内的图片。
  33. winform.button.oncommand = function(id,event){       
  34.         if(files){
  35.                 sqlConn.exec("UPDATE film SET title = @a ",{
  36.                         a = string.load(files);
  37.                 } );
  38.         }
  39. }


  40. //控件显示图片
  41. winform.picturebox.oncommand = function(id,event){
  42.         files = fsys.dlg.open();
  43.         if(files){
  44.                 winform.picturebox.image = string.load(files)
  45.         }
  46. }

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

复制代码
回复

使用道具 举报

9

主题

462

帖子

2551

积分

版主

Rank: 7Rank: 7Rank: 7

积分
2551
发表于 2013-11-8 17:41:49 | 显示全部楼层

sqlite里字符串分为二进制 blob,以及普通文本。 你直接写参数,这是靠自动判断,实际上是没有方法判断一个数据是不是二进制的。 所以你写入二进制数据(

sqlite里字符串分为二进制 blob,以及普通文本。
你直接写参数,这是靠自动判断,实际上是没有方法判断一个数据是不是二进制的。
所以你写入二进制数据(如图片)要显示的调用blob函数绑定参数,指定为blob类型,

可参考抓网页的那个源码,关键代码就是这一句 command.bind.blob( 参数 )

import sqlite;
import inet.whttp;
import web.form;
import win.ui;
/*DSG{{*/
var winform = win.form( bottom=399;right=599;text="Web Form")
/*}}*/
var wb = web.form( winform  );
wb.noScriptErr=
true;
winform.show()

//创建测试数据库和表
var db = sqlite("\test.db") ;
if(!db.existsTable("oald8")){
    db.exec(
"create table oald8 (html)")   
}

function getPageCode(url){//获取网页源码函数
    var whttp = inet.whttp() ;
    whttp.setTimeouts(3000,3000,3000)
   
var pageCode =whttp.get(url) ;  
   
return pageCode;   
}

var code = getPageCode("http://oald8.oxfordlearnersdictionaries.com/dictionary/take")
var command = db.prepare("insert into [oald8] values (@html);");
command.bind.blob(code)
command.step()

wb.html = db.stepQuery(
"select * from [oald8]").html;
winform.show()
win.loopMessage();  
db.close();



评分

参与人数 1银币 +50 收起 理由
leisurely + 50 感谢roger版主指点!

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册会员

本版积分规则

手机版|未经许可严禁引用或转载本站文章|站长邮箱|aardio.com|aardio官方社区 ( 皖ICP备09012014号 )

GMT+8, 2018-10-21 23:10 , Processed in 0.078125 second(s), 23 queries .

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表