2012-03-07 12 views
0

私が取り組むAndroidアプリケーションのデータベースを作成しています。正しい標準に従ってコードを作成する方法を学びたいと思っています.DbHelperクラスのonCreateメソッドでは、データベースが作成されます。また、onCreateメソッドでデータベースにデータを設定する必要があることも読んでいます。これは正しいです?もしそうなら、どのようにしてオブジェクトをonCreateメソッドに渡すことができるので、それをループしてデータベースに取り込むことができますか?Android SQLite:onCreateメソッドを呼び出してオブジェクトを渡す

public class DbHelper extends SQLiteOpenHelper 
{ 
private static String DATABASE_NAME = "FodoSubstitutes.db"; 
private static String FOOD_TABLE = "Food"; 

//Creates the database with db name and calls onCreate(). 
public DbHelper(Context context) 
{ 
    super(context, DATABASE_NAME, null, 1); 
} 

@Override 
public void onCreate(SQLiteDatabase db) 
{ 
    //System.out.println("in onCreate"); 
    //assocID food healthierFood category description count submittedBy 
    String sql = "CREATE TABLE IF NOT EXISTS " + FOOD_TABLE + 
       "(Food_ID integer primary key, " + 
       "Food_Name string not null, " + 
       "Food_Aliases string, " + 
       "Hints string, " + 
       "Category string, " + 
       "Subcategory string, " + 
       "Description string, " + 
       "Submission_ID int, " + 
       "Comment_ID int, " + 
       "Count int); "; 
    db.execSQL(sql); 

} 
} 

私の考えは、このようなことでした。
DbHelper.onCreate(Food myFoodObj);

しかし、それは動作しません。何かご意見は?それは私が見落としているシンプルで明白なものになっています。

+0

これを2つの部分に分割します。パート1:データベースを作成します。パート2:オブジェクトをデータベースに更新するメソッドを作成します。たとえば、 'addFood'というメソッドを作成し、適切な 'db.execSQL'、' dbを実行します。「クエリ」などが含まれる。おそらく、データベースが存在するかどうかをチェックするために、いくつかのヘルパーメソッドも必要になるでしょう。また、これを覚えておいてください:http://stackoverflow.com/a/7164505/429047 –

答えて

1

に従うことができます。 onCreate()は、データベースとテーブルを作成するために使用されます。

私の考えは、このようなことでした。 DbHelper.onCreate(食品 myFoodObj);

これは間違っているため、onCreate()を呼び出す必要はありません。 onCreate()は、Databaseクラスを使用しているクラスのインスタンスを参照するときに呼び出されます。

DbHelper dbhelper = new DbHelper(this); 
0
public class DBAdapter { 

String sql = "CREATE TABLE IF NOT EXISTS " + FOOD_TABLE + 
       "(Food_ID integer primary key, " + 
       "Food_Name string not null, " + 
       "Food_Aliases string, " + 
       "Hints string, " + 
       "Category string, " + 
       "Subcategory string, " + 
       "Description string, " + 
       "Submission_ID int, " + 
       "Comment_ID int, " + 
       "Count int); "; 
private DatabaseHelper DBHelper; 
    private SQLiteDatabase db; 

    public DBAdapter (Context ctx) { 
     this.context = ctx; 
     DBHelper = new DatabaseHelper(context); 
    } 

    private class DatabaseHelper extends SQLiteOpenHelper { 
     DatabaseHelper(Context context) { 
      super(context, DATABASE_NAME, null, DATABASE_VERSION); 

     } 

     public void onCreate(SQLiteDatabase db) { 
      db.execSQL(sql); 

     } 

     public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
      Log.w(TAG, "Upgrading database from version " + oldVersion + " to " 
        + newVersion + ", which will destroy all old data"); 
      db.execSQL("DELETE FROM" + DATABASE_USERSTATUS); 
      onCreate(db); 
     } 
    } 

    // ---opens the database--- 
    public SecureSMSDBAdapterAES open() throws SQLException { 
     db = DBHelper.getWritableDatabase(); 

     return this; 
    } 

    // ---closes the database--- 
    public void close() { 
     DBHelper.close(); 
    } 

    // ---insert values into the database--- 

    public long insertDataByQuery(String q) { 

     db.execSQL(q); 

     return 0; 
    } 
} 

、Uはデータベース

DBAdapter dbAdapter =新しいDBAdapterを(この)インスタンス化するクラスで、 dbAdapter.open(); //ここにクエリーが記述されている場合 dbadapter.close();

Uはありません、onCreate()内のデータを使用してデータベースを作成する必要はありません。このチュートリアルに

http://www.vogella.de/articles/AndroidSQLite/article.html

0

SQLiteOpenHelper内のonCreateメソッドは、データベースを作成するためのものです...と私はuser1203673として said..youはへのコードのこの部分を追加することができます。..のonCreateメソッドでデータベースに投入することは有用ではないと思いますデータベースを作成するためにDBAdapterクラス..

public void createcustom(String category,String subcategory){ 
ContentValues values = new ContentValues(2); 
values.put(Category string,category); 
values.put(Subcategory string,subcategory); 
long insertId = customdb.insert(sqliteplaylist.LIBRARY, null,values); 

} 

としてあなたの活動からこれを呼び出す "DBAdapter.createcustom(foodname、foodcategory);"

0

ここに私がやったことがあります。私はこのように見えるDbHelperと一緒に動作するDataLyaerクラスを作成しました。

public class DataLayer 
{ 

private DbHelper _dbHelper; 

public DataLayer(Context c) 
{ 
    _dbHelper = new DbHelper(c); 
} 


public void populateMyDB(Table myTables) 
{ 
    SQLiteDatabase db = _dbHelper.getWritableDatabase(); 
    try 
    { 
     //do stuff. 

    } 
    finally 
    { 
     if (db != null) 
      db.close(); 
    } 

} 
} 

これを実行してDataLayerを呼び出します。

DataLayer d = new DataLayer(context); 
d.populateMyDB(myFood); 

ありがとうございました。問題は、onCreate()メソッドやDbHelperクラスでもこのようなものを追加する方法を見つけることができなかったことです。私は何かをオンラインで投稿する人は信じられません。

関連する問題