2011-12-10 10 views
1

私は自分のコードを作成してオープンするデータベースの一部を持っていますが、同じデータベースに2つのテーブルを作成したいので問題があります。どうしたらいいですか?モバイルアプリケーションでSQLiteの同じデータベースに複数のテーブルを作成する方法は?

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

私は1つのステートメントで

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));" 

それを実行しようとしましたが、失敗し、

答えて

2

は、あなたが2つの別々のコマンドとして、テーブルクエリを作成、実行しようとしたことがありますか?しましたか

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デベロッパーではないことに気をつけてください。

+0

私もFlex Developerではありませんが、この解決策が正しいことがわかると、この問題がどの程度簡単かはわかりません。どうもありがとう。 –