sqlite - 如何在移动应用程序的SQLite中的同一数据库中创建多个表?

标签 sqlite actionscript-3 apache-flex flex4.5

我有一部分代码可以创建和打开数据库,但是有一个问题,因为我想在同一数据库中创建两个表。我该怎么做?

private var db:File = File.userDirectory.resolvePath("DataBase.sql");
        private var conn:SQLConnection;
        private var createTableStmt:SQLStatement;
        private var createTableSQL:String =
            "CREATE TABLE IF NOT EXISTS RecipeDB (" +
            "RecipeID INTEGER PRIMARY KEY AUTOINCREMENT," +
            "Name VARCHAR(20)," + "Category VARCHAR(20)," + "Origin VARCHAR(20)," + "Recipe VARCHAR(2000)," + "Favorite BOOL)";

        private var selectStmt:SQLStatement;
        private var selectSQL:String = "SELECT * FROM RecipeDB";
        private var insertStmt:SQLStatement;
        private var insertSQL:String =
            "INSERT INTO FoodDish2 (Name, Category, Origin, Recipe)" +
            "VALUES (:Name, :Category, :Origin, :Recipe)";
        protected function application1_applicationCompleteHandler
        (event:FlexEvent):void
        {
            conn = new SQLConnection();
            conn.addEventListener(SQLEvent.OPEN, openHandler);
            conn.addEventListener(SQLErrorEvent.ERROR, errorHandler);
            conn.openAsync(db);
        }
        private function openHandler(event:SQLEvent):void {
            log.text += "Database opened successfully";
            conn.removeEventListener(SQLEvent.OPEN, openHandler);
            createTableStmt = new SQLStatement();
            createTableStmt.sqlConnection = conn;
            createTableStmt.text = createTableSQL;
            createTableStmt.addEventListener(SQLEvent.RESULT, createResult);
            createTableStmt.addEventListener(SQLErrorEvent.ERROR,
                errorHandler);
            createTableStmt.execute();
        }


我已经尝试过一次声明

private var createTableSQL:String ="CREATE TABLE IF NOT EXISTS RecipeDB(
RecipeID INTEGER PRIMARY KEY AUTOINCREMENT,
Name VARCHAR(20),
Category VARCHAR(20),
Origin VARCHAR(20),
Recipe VARCHAR(2000));

CREATE TABLE IF NOT EXISTS IngredientDB(
RecipeID INTEGER REFERENCES RecipeDB(RecipeID),
Ingredient VARCHAR(20),
Quantity VARCHAR(20));"


但是失败了

最佳答案

您是否尝试过将创建表查询作为两个单独的命令执行?

private var db:File = File.userDirectory.resolvePath("DataBase.sql");
private var conn:SQLConnection;
private var createTableStmt:SQLStatement;
private var createTableRecipeSQL:String =
    "CREATE TABLE IF NOT EXISTS RecipeDB (" +
    "RecipeID INTEGER PRIMARY KEY AUTOINCREMENT," +
    "Name VARCHAR(20)," + "Category VARCHAR(20)," + "Origin VARCHAR(20)," + "Recipe VARCHAR(2000)," + "Favorite BOOL)";

private var createTableIngredientSQL:String =
    "CREATE TABLE IF NOT EXISTS IngredientDB(" +
    "RecipeID INTEGER REFERENCES RecipeDB(RecipeID)," +
    "Ingredient VARCHAR(20),Quantity VARCHAR(20))";

......

private function openHandler(event:SQLEvent):void {
    log.text += "Database opened successfully";
    conn.removeEventListener(SQLEvent.OPEN, openHandler);
    createTableStmt = new SQLStatement();
    createTableStmt.sqlConnection = conn;
    createTableStmt.text = createTableRecipeSQL;
    createTableStmt.addEventListener(SQLEvent.RESULT, createResult);
    createTableStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
    createTableStmt.execute();

    createTableStmt = new SQLStatement();
    createTableStmt.sqlConnection = conn;
    createTableStmt.text = createTableIngredientSQL;
    createTableStmt.addEventListener(SQLEvent.RESULT, createResult);
    createTableStmt.addEventListener(SQLErrorEvent.ERROR, errorHandler);
    createTableStmt.execute();
}


ps。请注意,我不是Flex开发人员。

关于sqlite - 如何在移动应用程序的SQLite中的同一数据库中创建多个表?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8460552/

相关文章:

java - 将现有的 sqlite 数据库文件从 Assets 复制到 Android 项目时遇到问题

python - 检查数据库中的列是否有值

actionscript-3 - 如何取消 Halo/Spark TextInput 和 TextArea 组件中的编辑

actionscript-3 - Actionscript 3.0 交换

apache-flex - Flex 4.5 - Spark DropDownList - DropDown 的最小宽度是 anchor 的宽度

css - Flex - 为什么我缺少一些 spark 组件(但不是全部)?

android - "table or subquery expected, got "Android Room 错误

java - Android 插入数据库时​​出错,代码 19 : constraint failed

apache-flex - 将变量绑定(bind)到 ItemRender 组件属性

ios - Flex 自定义皮肤无法调出 IOS 软键盘