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

前端之家收集整理的这篇文章主要介绍了flex – SQLStatement.execute() – 在一个语句中的多个查询前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我在 SQL中编写了一个数据库生成脚本,并希望在我的 Adobe AIR应用程序中执行它:
  1. Create Table tRole (
  2. roleID integer Primary Key,roleName varchar(40)
  3. );
  4. Create Table tFile (
  5. 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)
  6. );
  7. Create Table tCategory (
  8. categoryID integer Primary Key,categoryName varchar(50),parent_categoryID integer
  9. );
  10. ...

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

  1. public static function RunsqlFromFile(fileName:String):void {
  2. var file:File = File.applicationDirectory.resolvePath(fileName);
  3. var stream:FileStream = new FileStream();
  4. stream.open(file,FileMode.READ)
  5. var strsql:String = stream.readUTFBytes(stream.bytesAvailable);
  6. NonQuery(strsql);
  7. }
  8.  
  9. public static function NonQuery(strsql:String):void
  10. {
  11. var sqlConnection:sqlConnection = new sqlConnection();
  12. sqlConnection.open(File.applicationStorageDirectory.resolvePath(DBPATH);
  13. var sqlStatement:sqlStatement = new sqlStatement();
  14. sqlStatement.text = strsql;
  15. sqlStatement.sqlConnection = sqlConnection;
  16. try
  17. {
  18. sqlStatement.execute();
  19. }
  20. catch (error:sqlError)
  21. {
  22. Alert.show(error.toString());
  23. }
  24. }

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

解决方法

我用这个。这是一种黑客,但它实际上工作相当不错。唯一的事情是你必须非常小心你的分号。 :D
  1. var strsql:String = stream.readUTFBytes(stream.bytesAvailable);
  2. var i:Number = 0;
  3. var strsqlSplit:Array = strsql.split(";");
  4. for (i = 0; i < strsqlSplit.length; i++){
  5. NonQuery(strsqlSplit[i].toString());
  6. }

猜你在找的Flex相关文章