Apache flex Flex Air应用程序SQLStatement返回null

Apache flex Flex Air应用程序SQLStatement返回null,apache-flex,air,null,adobe,Apache Flex,Air,Null,Adobe,我的SQL语句查询返回null。让我抓狂的是,我可以让loadSchema工作并打印出每个表的所有表和列。但是我不能成功地执行一个简单的查询。你知道为什么会这样吗 public function db():void { conn = new SQLConnection(); conn.addEventListener(SQLEvent.OPEN, openHandler); dbFile = File.applicationStorageDirectory.resolv

我的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);  
        }
    }
我尝试过使用侦听器查询,并尝试使用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.sql文件的前20行,用于创建graduate_age表

-- 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,我将queryDB()方法调用替换为insert()方法调用,并给出了以下声明:

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();
    }

我的结果仍然为空。快把我逼疯了!这一定是件愚蠢的事。

你最好插入
毕业年龄
而不是
毕业年龄

也许应该首先使用一个非常简单的SQL语句来创建表并插入一条记录。如果这行得通,你可以在此基础上再接再厉

我将首先尝试从SQL语句中删除所有下划线,并可能以小写形式命名表和列,以便您可以更容易地将它们与SQL关键字区分开来

SQL语句中还有一些地方似乎不正确

您正在创建一个名为GRADUATE_AGE的表,但该表正在尝试插入GRADUATE

CREATE TABLE IF NOT EXISTS graduate (id INTEGER PRIMARY KEY AUTOINCREMENT, gap REAL, creditsAttempted REAL, creditsPassed REAL, currentCredits REAL, age INTEGER, gender TEXT)

INSERT INTO graduate (gap, creditsAttempted, creditsPassed, currentCredits, age, gender) VALUES (2.7, 138.5, 138.5, 7, 25.74, 'M')

你能告诉我们实际的sql语句吗?i、 是的,我有一种感觉,那就是我的错误所在。但我认为我所有的sql文件都是有效的sql和sqllite。我已经更新了帖子,显示了我的graduate_age.sql文件的前20行。我刚刚添加了以下方法:抱歉。我贴错了。实际上我也有一张毕业表。一个grade.sql文件,用于创建名为grade的表。非常相似。我也试过使用
SELECT*FROM GRADUATE\u AGE
,但没有用。谢谢你的帮助。这不是真正的问题,但它帮助我更仔细地查看了实际问题所在的sql文件。谢谢对不起,浪费了你的时间。没必要找借口。我们是来互相帮助的。:)我试试看。谢谢你的建议。我更新了我的帖子以反映你的改动。还是一样的问题。这对我来说真是个大麻烦。很抱歉浪费了你的时间。这是一个简单的sql错误。愚蠢的我。谢谢你的帮助。很抱歉给您带来不便。