我正在使用 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();
}