我的SQL语句查询返回null。让我疯狂的是,我可以让loadSchema工作并打印出每张表的所有表和列。但是我无法成功执行简单的查询。任何想法,为什么这可能会发生?Flex空应用程序SQLStatement返回null
public function db():void {
conn = new SQLConnection();
conn.addEventListener(SQLEvent.OPEN, openHandler);
dbFile = File.applicationStorageDirectory.resolvePath("DB.sql");
conn.open(dbFile);
}
private function openHandler(event:SQLEvent):void {
trace("The database was created successfully");
makeTables();
trace("Make Tables Called");
}
做桌子方法:
private function makeTables():void{
var createGraduateTable:SQLStatement = new SQLStatement();
createGraduateTable.sqlConnection = conn;
createGraduateTable.text = graduateLoader.data;
var createGraduateAgeTable:SQLStatement = new SQLStatement();
createGraduateAgeTable.sqlConnection = conn;
createGraduateAgeTable.text = graduateAgeLoader.data;
var createMarathonTable:SQLStatement = new SQLStatement();
createMarathonTable.sqlConnection = conn;
createMarathonTable.text = marathonLoader.data;
try {
createGraduateTable.execute();
createGraduateAgeTable.execute();
createMarathonTable.execute();
trace("Tables Created");
// Describe Database
conn.loadSchema(SQLTableSchema);
for each(var SQLTableStmt:SQLTableSchema in conn.getSchemaResult().tables){
trace("Table: " + SQLTableStmt.name);
for each (var SQLColm:SQLColumnSchema in SQLTableStmt.columns){
trace("Column name: " + SQLColm.name);
}
}
queryDB();
}catch(error:SQLError){
trace("Error message:", error.message);
trace("Details:", error.details);
}
}
我试着查询使用监听器的,并尝试catch块,但没有任何工程。
queryDB方法:
public function queryDB(tableName:String = null):void{
var query:SQLStatement = new SQLStatement();
query.sqlConnection = conn;
query.text = "SELECT * FROM GRADUATE";
//query.addEventListener(SQLEvent.RESULT, queryResult);
//query.addEventListener(SQLErrorEvent.ERROR, queryError);
try{
query.execute();
var result:SQLResult = query.getResult();
if (result != null){
trace("Results: " + result.data);
}else{
trace("Result NULL");
}
}catch(e:SQLError){
}
}
private function queryResult(e:SQLEvent):void{
var result:SQLResult = e.target.getResult();
trace("Results: " + result.data);
conn.close();
}
private function queryError(e:SQLErrorEvent):void{
trace("Error message:", e.error.message);
trace("Query Error: " + e.error.details);
}
就像我说的,奇怪的是,当我执行这一点,我会打印出所有的表名和列正确,但result.data始终为空。任何帮助是极大的赞赏。
以下是用于创建GRADUATE_AGE表的graduate_age.sql文件的前20行。
-- DROP TABLE IF EXISTS GRADUATE_AGE;
CREATE TABLE IF NOT EXISTS GRADUATE_AGE (
GPA REAL,
CREDITS_ATTEMPTED REAL,
CREDITS_PASSED REAL,
CURRENT_CREDITS REAL,
AGE REAL,
GENDER TEXT
);
INSERT INTO GRADUATE_AGE VALUES (2.7, 138.5, 138.5, 7, 25.74, 'M');
INSERT INTO GRADUATE_AGE VALUES (3.57, 146, 78, 9, 22.09, 'F');
INSERT INTO GRADUATE_AGE VALUES (3.63, 131, 131, 14, 23.21, 'M');
INSERT INTO GRADUATE_AGE VALUES (3.86, 152, 119, 14, 26.56, 'M');
INSERT INTO GRADUATE_AGE VALUES (3.03, 115.5, 115.5, 15, 26.3, 'M');
INSERT INTO GRADUATE_AGE VALUES (2.25, 39, 39, 16, 23.8, 'M');
INSERT INTO GRADUATE_AGE VALUES (0, 48, 0, 14, 22.45, 'M');
INSERT INTO GRADUATE_AGE VALUES (3.02, 63.5, 51.5, 14.5, 25.4, 'M');
INSERT INTO GRADUATE_AGE VALUES (3.14, 40, 40, 14, 32.93, 'M');
INSERT INTO GRADUATE_AGE VALUES (2.73, 62, 62, 14, 21.35, 'M');
INSERT INTO GRADUATE_AGE VALUES (3.39, 144, 81, 17, 24.32, 'M');
在回应@ crooksy88我替换insert()方法调用queryDB()方法调用,并给它下面的声明:
private function insert():void{
trace("Attempt Insert");
var insert:SQLStatement = new SQLStatement();
insert.sqlConnection = conn;
var insertStr:String = "";
insertStr += "INSERT INTO GRADUATE_AGE (GPA, CREDITS_ATTEMPTED, CREDITS_PASSED, CURRENT_CREDITS, AGE, GENDER) VALUES (2.7, 138.5, 138.5, 7, 25.74, 'M');";
insertStr += "INSERT INTO GRADUATE_AGE (GPA, CREDITS_ATTEMPTED, CREDITS_PASSED, CURRENT_CREDITS, AGE, GENDER) VALUES (3.57, 146, 78, 9, 22.09, 'F');";
insert.text = insertStr;
insert.addEventListener(SQLEvent.RESULT, quereyResult);
insert.addEventListener(SQLErrorEvent.ERROR, quereyError);
insert.execute();
}
private function insertResult(e:SQLEvent):void{
trace("Insert Complete: " + e.target.text);
queryDB();
}
我仍然得到空了我的结果。快把我逼疯!它的确很愚蠢。
你能告诉我们实际的sql语句吗?即graduateLoader.data,graduateAgeLoader.data和marathonLoader.data – crooksy88 2013-03-14 11:18:46
是的,我有一种感觉,那就是我的错误所在。但我认为我所有的sql文件都是有效的sql和sqllite。我已更新帖子以显示我的graduate_age.sql文件的前20行 – sdc 2013-03-14 20:34:38
我刚刚添加了以下方法: – sdc 2013-03-14 22:35:15