为什么我无法通过在 AIR 桌面应用程序中使用 SQLite 的 'LIKE' 子句来获取任何结果?
Why am I unable to use obtain any results by using SQLite's 'LIKE' clause in an AIR Desktop App?
我正在尝试为 class 项目构建一个简单的图书馆管理系统。我正在使用 SQLite 来做到这一点。
该应用程序如下所示:
起初我 select 并从 table 加载所有内容,如上图所示工作正常:
这是创建 table 查询:
"CREATE TABLE IF NOT EXISTS books (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, isbn TEXT, category TEXT, authors TEXT, publisher TEXT, edition INTEGER, copies INTEGER, pdf TEXT, cover TEXT)";
这里是select整个table的查询:
"SELECT id, title, isbn, authors, publisher, edition, copies, pdf, cover FROM books ORDER BY id";
为了实现搜索功能,我尝试使用 'LIKE' 子句,如下所示:
"SELECT id, title, isbn, category, authors, publisher, edition, copies, pdf, cover FROM books WHERE title LIKE %'"+userInput+"'% ORDER BY id";
当我使用上述查询进行搜索时,出现此错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at (address-removed)/BooksContainer.as:124]
这是第 124 行:
var numResults:uint = result.data.length;
我尝试更改代码,但在使用了大约一周后,我仍然遇到同样的错误。
然而,昨天我尝试以不同的方式处理它,因为我真的很沮丧,而且我确信这种方法会奏效。我所做的是 select 像这样编辑整个 table:
public function searchBooks(userInput:String)
{
var stat:SQLStatement = new SQLStatement();
stat.sqlConnection = _connection;
stat.text = "SELECT id, title, isbn, category, authors, publisher, edition, copies, pdf, cover FROM books ORDER BY id";
//stat.parameters['@search'] = "%" + userInput + "%";
stat.execute();
trace(stat.text);
searchedString = userInput;
stat.addEventListener(SQLEvent.RESULT, createSearchedContent, false, 0, true);
}
private function createSearchedContent(e:SQLEvent):void
{
var result:SQLResult = e.target.getResult();
_allBooks = result;
trace(result.data);
var numResults:uint = result.data.length;
var currentY:Number = 0;
var xIterator:Number = 0;
for (var i:int = 0; i < numResults; i++)
{
var row:Object = result.data[i];
var bookTitle:String = String(result.data[i].title);
if (bookTitle.toLowerCase().indexOf(searchedString.toLowerCase()) > -1)
{
var book:Book = new Book(row.title, row.isbn, row.category, row.authors, row.publisher, row.edition, row.copies, row.pdf, row.cover);
book.x = book.width * xIterator + 10;
book.y = currentY;
addChild(book);
xIterator++;
if (xIterator == 7)
{
xIterator = 0;
currentY += book.height + 10;
}
}
}
}
令人惊讶的是,我得到了同样的错误。我根本没听懂。然后我把它放在上面的循环中:
var a:String = _main.search_txt.text.toLowerCase();
var b:String = String(row.title.toLowerCase());
trace(b.indexOf(a), a, b);
我发现,在跟踪中,我总是为搜索词得到 -1。
这是输出 window:
-1 data dark matter and the dinosaures
-1 data a history of religious ideas
-1 data steve jobs
-1 data digital logic design
-1 data thomas calculus
-1 data Data structures and algorithms in java
-1 data data structures in c++
-1 data data structures and algorithms in java
-1 data data structures and algorithms in java
所以有人可以帮我解决这个问题吗??我只有一周的时间来完成这个项目。提前致谢。
看来百分比运算符的位置有问题。
收集查询
where something like '%foo%'
您的查询
where something like %'foo'%
将百分比运算符放在单引号内。
"SELECT id, title, isbn, category, authors, publisher, edition, copies, pdf, cover FROM books WHERE title LIKE '%"+userInput+"%' ORDER BY id";
您还可以使用带参数的 like 子句。
ActionScript and SQLite parameters on Select using Like
我正在尝试为 class 项目构建一个简单的图书馆管理系统。我正在使用 SQLite 来做到这一点。
该应用程序如下所示:
起初我 select 并从 table 加载所有内容,如上图所示工作正常:
这是创建 table 查询:
"CREATE TABLE IF NOT EXISTS books (id INTEGER PRIMARY KEY AUTOINCREMENT, title TEXT, isbn TEXT, category TEXT, authors TEXT, publisher TEXT, edition INTEGER, copies INTEGER, pdf TEXT, cover TEXT)";
这里是select整个table的查询:
"SELECT id, title, isbn, authors, publisher, edition, copies, pdf, cover FROM books ORDER BY id";
为了实现搜索功能,我尝试使用 'LIKE' 子句,如下所示:
"SELECT id, title, isbn, category, authors, publisher, edition, copies, pdf, cover FROM books WHERE title LIKE %'"+userInput+"'% ORDER BY id";
当我使用上述查询进行搜索时,出现此错误:
TypeError: Error #1009: Cannot access a property or method of a null object reference.
at (address-removed)/BooksContainer.as:124]
这是第 124 行:
var numResults:uint = result.data.length;
我尝试更改代码,但在使用了大约一周后,我仍然遇到同样的错误。 然而,昨天我尝试以不同的方式处理它,因为我真的很沮丧,而且我确信这种方法会奏效。我所做的是 select 像这样编辑整个 table:
public function searchBooks(userInput:String)
{
var stat:SQLStatement = new SQLStatement();
stat.sqlConnection = _connection;
stat.text = "SELECT id, title, isbn, category, authors, publisher, edition, copies, pdf, cover FROM books ORDER BY id";
//stat.parameters['@search'] = "%" + userInput + "%";
stat.execute();
trace(stat.text);
searchedString = userInput;
stat.addEventListener(SQLEvent.RESULT, createSearchedContent, false, 0, true);
}
private function createSearchedContent(e:SQLEvent):void
{
var result:SQLResult = e.target.getResult();
_allBooks = result;
trace(result.data);
var numResults:uint = result.data.length;
var currentY:Number = 0;
var xIterator:Number = 0;
for (var i:int = 0; i < numResults; i++)
{
var row:Object = result.data[i];
var bookTitle:String = String(result.data[i].title);
if (bookTitle.toLowerCase().indexOf(searchedString.toLowerCase()) > -1)
{
var book:Book = new Book(row.title, row.isbn, row.category, row.authors, row.publisher, row.edition, row.copies, row.pdf, row.cover);
book.x = book.width * xIterator + 10;
book.y = currentY;
addChild(book);
xIterator++;
if (xIterator == 7)
{
xIterator = 0;
currentY += book.height + 10;
}
}
}
}
令人惊讶的是,我得到了同样的错误。我根本没听懂。然后我把它放在上面的循环中:
var a:String = _main.search_txt.text.toLowerCase();
var b:String = String(row.title.toLowerCase());
trace(b.indexOf(a), a, b);
我发现,在跟踪中,我总是为搜索词得到 -1。
这是输出 window:
-1 data dark matter and the dinosaures
-1 data a history of religious ideas
-1 data steve jobs
-1 data digital logic design
-1 data thomas calculus
-1 data Data structures and algorithms in java
-1 data data structures in c++
-1 data data structures and algorithms in java
-1 data data structures and algorithms in java
所以有人可以帮我解决这个问题吗??我只有一周的时间来完成这个项目。提前致谢。
看来百分比运算符的位置有问题。
收集查询
where something like '%foo%'
您的查询
where something like %'foo'%
将百分比运算符放在单引号内。
"SELECT id, title, isbn, category, authors, publisher, edition, copies, pdf, cover FROM books WHERE title LIKE '%"+userInput+"%' ORDER BY id";
您还可以使用带参数的 like 子句。
ActionScript and SQLite parameters on Select using Like