actionscript-3 - 当尝试选择 BLOB 类型的列时,SQLStatement 抛出 RangeError #2006 : The supplied index is out of bounds

标签 actionscript-3 sqlite air blob

var imageData:ByteArray = new ByteArray();
var headshotStatement:SQLStatement = new SQLStatement();
headshotStatement.sqlConnection = dbConnection;
var headshotStr:String = "SELECT headshot FROM ac_images WHERE id = " + idx;
headshotStatement.text = headshotStr;
headshotStatement.execute();

错误引用了该 block 中的最后一行。我在网上找到了一些引用资料,其中人们无法使用 AS3 选择已从外部程序插入数据的 BLOB,这正是我的情况。

确切的错误跟踪是:

RangeError: Error #2006: The supplied index is out of bounds.
at flash.data::SQLStatement/internalExecute()
at flash.data::SQLStatement/execute()
at edu.bu::DataManager/getHeadshotImageData()[omitted/DataManager.as:396]
at edu.bu::CustomStudentProfileEditorWindow/editStudent()[omitted/CustomStudentProfileEditorWindow.mxml:194]
at edu.bu::CustomStudentProfileEditorWindow/profileEditor_completeHandler()[omitted/CustomStudentProfileEditorWindow.mxml:37]
at edu.bu::CustomStudentProfileEditorWindow/___CustomStudentProfileEditorWindow_Window1_creationComplete()[omitted/CustomStudentProfileEditorWindow.mxml:9]
at flash.events::EventDispatcher/dispatchEventFunction()
at flash.events::EventDispatcher/dispatchEvent()
at mx.core::UIComponent/dispatchEvent()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:12528]
at mx.core::UIComponent/set initialized()[E:\dev\4.x\frameworks\projects\framework\src\mx\core\UIComponent.as:1627]
at mx.managers::LayoutManager/doPhasedInstantiation()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:759]
at mx.managers::LayoutManager/doPhasedInstantiationCallback()[E:\dev\4.x\frameworks\projects\framework\src\mx\managers\LayoutManager.as:1072]

你知道导致 AS3 阻塞的数据可能有什么问题吗?

编辑:我尝试使用适用于 OS X 的 SQLite Manager 3.5 将相同的数据插入二进制类型字段,并得到相同的结果。我正在使用 JPG,打算尝试其他图像格式,尽管我无法开始猜测哪个提供的索引超出范围,因为尝试跳转到定义只是表明它是从 SWC 获取的,我可以没看到。在我将数据分发到 zip 中并即时解压缩之前,捕获救命稻草,这是我不想做的。

编辑 2,解决方法版本: 现在,我已经编写了一个快速的 MXML 窗口,它会提示输入图像并将数据插入数据库。仍然想知道为什么另一个应用程序不能以 SQLStatement 理解的方式存储 BLOB 数据。我本质上是设置一些按钮,提示输入数据库中我想要的图像的文件路径,使用 readBytes() 将它们读入 ByteArray,并使用 SQLStatement 将其存储到 SQLite 数据库中。然后我就可以毫无困难地读回图像。

编辑 3: 这是表结构的图像。请注意,当我使用 Flash 执行数据库镜像插入时,可以成功使用同一个表,而不是使用其他工具将数据正确存储在除 Flash 之外的所有其他应用程序的 BLOB 字段中...

Table

最佳答案

根据 Air 文档,从 Air 2.5 开始,CAST 支持引入非 AMF blob。我在使用 python 创建并在 Air 中使用的数据库/blob 字段时遇到了同样的问题,这为我解决了这个问题。

文档中的示例:

stmt.text = "SELECT CAST(data AS ByteArray) AS data FROM pictures;"; 
stmt.execute(); 
var result:SQLResult = stmt.getResult(); 
var bytes:ByteArray = result.data[0].data;

http://help.adobe.com/en_US/as3/dev/WSd47bd22bdd97276f1365b8c112629d7c47c-8000.html

关于actionscript-3 - 当尝试选择 BLOB 类型的列时,SQLStatement 抛出 RangeError #2006 : The supplied index is out of bounds,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3603420/

相关文章:

actionscript-3 - 如何动态访问对象属性?

javascript - 是什么导致Flash和Actionscript变得无关紧要?

apache-flex - Adobe 空气浏览器

actionscript-3 - 堆叠动态文本字段 Flash/ActionScript 3

c++ - 连接到数据库时出现错误 `driver not loaded`

database - sqlite3数据库文件大小问题

python - 我的 flask sqlite 数据库中的图像应该使用什么数据类型?

apache-flex - Actionscript 的 Number 类的 toFixed() 方法返回奇怪的值

ios - CodeSign 验证失败 - Adob​​e Flash AIR iOS

android - mxmlc 在命令行构建期间不包含 *.ane 文件