flex – SQLStatement.execute() – 在一个语句中的多个查询

前端之家收集整理的这篇文章主要介绍了flex – SQLStatement.execute() – 在一个语句中的多个查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 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。它似乎只看第一个查询(直到分号 – 如果我删除它,查询失败)。有没有办法在一个语句中调用多个查询

解决方法

我用这个。这是一种黑客,但它实际上工作相当不错。唯一的事情是你必须非常小心你的分号。 :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());
}

猜你在找的Flex相关文章