我在SQL中编写了一个数据库生成脚本,并希望在我的Adobe AIR应用程序中执行它:

Create Table tRole (
    roleID integer Primary Key
    ,roleName varchar(40)
);
Create Table tFile (
    fileID integer Primary Key
    ,fileName varchar(50)
    ,fileDescription varchar(500)
    ,thumbnailID integer
    ,fileFormatID integer
    ,categoryID integer
    ,isFavorite boolean
    ,dateAdded date
    ,globalAccessCount integer
    ,lastAccessTime date
    ,downloadComplete boolean
    ,isNew boolean
    ,isSpotlight boolean
    ,duration varchar(30)
);
Create Table tCategory (
    categoryID integer Primary Key
    ,categoryName varchar(50)
    ,parent_categoryID integer
);
...

我使用以下方法在Adobe AIR中执行此操作:

public static function RunSqlFromFile(fileName:String):void {
    var file:File = File.applicationDirectory.resolvePath(fileName);
    var stream:FileStream = new FileStream();
    stream.open(file, FileMode.READ)
    var strSql:String = stream.readUTFBytes(stream.bytesAvailable);
    NonQuery(strSql);
}

public static function NonQuery(strSQL:String):void {
    var sqlConnection:SQLConnection = new SQLConnection();
    sqlConnection.open(File.applicationStorageDirectory.resolvePath(DBPATH));
    var sqlStatement:SQLStatement = new SQLStatement();
    sqlStatement.text = strSQL;
    sqlStatement.sqlConnection = sqlConnection;
    try {
        sqlStatement.execute();
    } catch (error:SQLError) {
        Alert.show(error.toString());
    }
}

不会产生错误,但只存在tRole 它似乎只查看第一个查询(直到分号 - 如果我删除它,查询失败)。 有没有办法在一个语句中调用多个查询?

===============>>#1 票数:19 已采纳

我用这个结束了。 这是一种黑客攻击,但实际上效果很好。

唯一的问题是你必须非常小心你的分号。 :D

var strSql:String = stream.readUTFBytes(stream.bytesAvailable);      
var i:Number = 0;
var strSqlSplit:Array = strSql.split(";");
for (i = 0; i < strSqlSplit.length; i++){
    NonQuery(strSqlSplit[i].toString());
}

===============>>#2 票数:10

SQLite API有一个名为sqlite_prepare的函数,它接受一个语句并准备执行,实质上是解析SQL并将其存储在内存中。 这意味着即使语句多次执行,SQL也只需要一次发送到数据库引擎。

无论如何,语句是单个SQL查询,这只是规则。 AIR SQL API不允许将原始SQL发送到SQLite,只允许发送单个语句,原因可能是AIR在与SQLite进行sqlite_prepare时使用sqlite_prepare函数。

===============>>#3 票数:3

怎么样使你的分隔符更复杂,比如“; \\ n”,它不会经常显示出来。 您只需要确保在创建文件时有一行或两行。 我最终把两个“\\ n \\ n”放到我的文件的创建中,这很好用。

  ask by Shawn translate from so

未解决问题?本站智能推荐:

1回复

正在获取“错误#3115:SQL错误。”,详细信息:“没有这样的表:”尝试执行SqlStatement时出错

我想做的是在异步模式下打开数据库,并从数据库中获取一些数据。 为此,我在下面写下了这段代码: 之后,我在openHandler方法中编写了以下代码: 我的startstmt是一个全局SqlStatement变量。 当我在Sqlite Manager中测试时,此查询可以正常工作
1回复

Flex:select count(id)使用SQLStatement以奇怪的方式返回结果吗?

当我使用Flex执行包含某些表达式的查询时,例如“从用户中选择count(id)作为idCount”,结果将以某种奇怪的方式出现。 如果我尝试将其解析为属性,则结果数据数组(应该存储上述查询的实际结果)中的第一个对象具有以下“ idCount = 0”-结果始终为“未定义” 如
1回复

从SELECT查询返回ArrayCollection

在我的AIR应用程序中,我试图从sqlite数据库中获取名称作为ArrayCollection。 这是我的代码。 我应该怎么做才能通过调用visitorName()函数将结果传递给ArrayCollection? 是否可以从嵌套函数获取返回值?我知道visitorName函数应更改为
1回复

如何在AIR中查看已编译的SQL查询?

我正在尝试使用参数在SQL中运行查询,但收到错误消息“无法将文本值转换为数值”。 错误在这个问题中并不重要。 如果我能够查看AIR使用所有参数构建的最终编译SQL查询,则可以修复它。 没有运气找到我该怎么做。 有人可以帮忙吗? 谢谢
1回复

如何获得启动多个相同Adobe Air应用程序的能力?

如何能够多次启动相同的Adobe Air应用程序? 如何制作到我的应用程序?
1回复

单击另一个符号内的符号时,将出现“违反ActionScript安全沙箱”

我正在开发一个加载SWF文件的AIR应用程序。 我将符号从已加载的SWF文件添加到FLEX画布中: 当我单击符号的一部分,该符号是放置在另一个符号中的符号时,出现错误: 由于这个错误,我无法为此类符号实现拖放。 造成此问题的原因是什么? 我附上一个SWF文件示例
3回复

adobe air - 无论如何要让OS打开一个文件,他们的原生应用程序?

在adobe air中,无论如何都要让操作系统在其原生应用程序中打开文件? Flex 4怎么样?
3回复

Flex(Actionscript)和import语句中的条件编译

我有一个用Flex编写的Web应用程序,我正在尝试使用条件编译从相同的代码库构建AIR应用程序。 在AIR应用程序中,我需要具有如下导入语句:import flash.data.SQLConnection; import flash.filesystem.File; 但是我不能在Web
3回复

一次使用多个SQLite数据库

我有2个SQLite数据库,一个从服务器下载( server.db ),另一个用作客户端上的存储( client.db )。 我需要使用服务器数据库中的数据在客户端数据库上执行各种同步查询。 例如,我想删除client.db tRole表中的所有行,并重新填充server.db tRol
2回复

Flash(AIR)中同时发生多个MultiTouchGesture事件

我创建了一个AIR应用程序,该应用程序利用Flash的内置功能来采取多点触摸手势( TransformGestureEvent.GESTURE_ZOOM和TransformGestureEvent.GESTURE_ROTATE ) 使用计算机触控板在Mac上可以正常工作。 在带有触摸屏的