Skip to main content
 首页 » 编程设计

apache-flex之Flex AIR Sqlite 作为嵌入式数据库

2025年01月19日18Leo_wl

我正在使用 Sqlite 作为嵌入式数据库在 Flex + AIR 中开发具有拼写检查功能的编辑器。
在数据库中,我有一个带有单词的表。该表包含一些单词。我已经编写了代码来搜索表中的单词。我已经为所有这些使用了同步方法。这会在搜索时暂停我的应用程序。
我想使用异步方法来停止应用程序暂停。

搜索词的代码如下:

    public function searchInDictionary(word:String):Boolean 
    { 
   if(word == "") 
    return true; 
      connection= new SQLConnection(); 
      var query:SQLStatement = new SQLStatement(); 
      query.sqlConnection = connection; 
      query.text = 'SELECT id FROM tbl_'+ CommonLanguageCode +' WHERE word LIKE "'+word+'"';       
 
      try 
      {         
        connection.open( dbfile,SQLMode.READ ); 
      } 
      catch(ex:Error) 
      {} 
 
      if(!connection.connected) 
        connection.open( dbfile ); 
      query.execute(); 
      var result:SQLResult = query.getResult();  
      if( result.data == null )  
      { 
        return false; 
      } 
      else 
      { 
        var numRows:uint = result.data.length;  
        var id:String; 
        if(numRows>0) 
          return true; 
        return false; 
      } 
      return false;         
  } 

如果此函数返回 false(未找到单词),那么我必须调用该函数来为该单词添加红色下划线。

如果我出错了,请建议我。当我使用同步方法时,搜索一个单词需要几毫秒。 &如果我正在写一段,那么它会使我的应用程序变得迟缓。

有没有其他方法可以更快地存储单词和搜索。如果是,请让我知道。

提前致谢。

请您参考如下方法:

您需要稍微重新组织您的代码,以便调用在结果返回时执行红色下划线的函数,而不是从方法返回 bool 值。

public function searchInDictionary(word:String):void 
{ 
  // Don't bother searching if no word was passed in 
  if(word == "") return; 
 
  // Open db connection asynchronously 
  var connection:SQLConnection = new SQLConnection(); 
  connection.openAsync(dbfile, SQLMode.READ); 
 
  // Create statement 
  var statement:SQLStatement = new SQLStatement(); 
  statement.sqlConnection = connection; 
  statement.text = 'SELECT id ' 
             + 'FROM tbl_'+ CommonLanguageCode +' ' 
             + 'WHERE word LIKE "' + word + '"'; 
 
  // Add event listener 
  statement.addEventListener(SQLEvent.RESULT, function(event:SQLEvent):void{ 
    var result:SQLResult = event.target.getResult(); 
    if(result.data.length == 0) { 
      // ... call method to red underline word in text ... 
    } 
  }); 
 
  // Execute statement 
  statement.execute(); 

}