我的 SQL 语句查询返回 null。让我发疯的是我可以让 loadSchema 工作并打印出每个表的所有表和列。但我无法成功执行一个简单的查询。任何想法为什么会发生这种情况?
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);
}
}
我尝试查询 using 侦听器并尝试 catch 块,但没有任何效果。
查询数据库方法:
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, queryResult);
insert.addEventListener(SQLErrorEvent.ERROR, queryError);
insert.execute();
}
private function insertResult(e:SQLEvent):void{
trace("Insert Complete: " + e.target.text);
queryDB();
}
我的结果仍然为空。快把我逼疯了!它一定是愚蠢的。