2013-01-03 23 views
7

SQLiteのデータ保存に関するAndroidの開発者ガイドラインは本当に欠けています。私は一般的なガイドラインは、複数のテーブルになるとは何かについては混乱しています。SQLiteOpenHelperに関する疑問と複数のテーブルの作成

私は現在、UIに2つの異なるエンティティのセット(CRUD)を公開する2つのマネージャを持っています。

ドI:

各マネージャー内部のプライベートクラスSQLiteOpenHelperを作成します。各ヘルパーは独自のテーブルに対して独自のonCreateを持ちますか?

または

は、両方のテーブルの作成、単一のパブリッククラスSQLiteOpenHelperを作成しますか?

私は他のものより上のものを使用することには明らかな利点はありませんが、どちらも使用されています。 Androidはこれについて何と言いますか?

+1

このオプションに従う必要があります。両方のテーブルを作成する単一のパブリッククラスSQLiteOpenHelperを作成しますか? – itsrajesh4uguys

答えて

7

複数のテーブルを作成するには、次のコードを使用してください(私は現在2つのテーブルを作成しています)。私は作成して挿入するためのコードを行っています。また..

import android.content.Context; 
import android.database.Cursor; 
import android.database.SQLException; 
import android.database.sqlite.SQLiteDatabase; 
import android.database.sqlite.SQLiteOpenHelper; 
import android.util.Log; 

public class MyDB { 
    public static final String KEY_ROWID = "_id"; 
     public static final String KEY_FIRSTNAME = "ID"; 
     public static final String KEY_LASTNAME = "CS"; 
     public static final String KEY_DESIGNATION = "CN"; 
     public static final String KEY_DN = "DN"; 

     private static final String TAG = "MyDB";  
     private static final String DATABASE_NAME = "test.db";  
     private static final int DATABASE_VERSION = 1; 

     private static final String DATABASE_CREATE_ValidateUser_DriverInfo = 
      "create table tabletest1 (_id integer primary key autoincrement, " 
      + "ID text not null, CS text not null,CN text not null,DN text not null);"; 

     private static final String DATABASE_CREATE_ValidateUser_TripInfo = 
       "create table tabletest2 (_id integer primary key autoincrement, " 
       + "TI text not null, PU text not null,LN text not null,FN text not null,Origin varchar not null,De text not null);"; 


     private Context context; 
     private DatabaseHelper DBHelper; 
     private SQLiteDatabase db; 

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

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

      @Override 
      public void onCreate(SQLiteDatabase db) 
      { 
       db.execSQL(DATABASE_CREATE_ValidateUser_DriverInfo); 
       db.execSQL(DATABASE_CREATE_ValidateUser_TripInfo); 
      } 

      @Override 
      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("DROP TABLE IF EXISTS Employee"); 
       onCreate(db); 
      } 
     } 


     public MyDB open() throws SQLException 
     { 
      db = DBHelper.getWritableDatabase(); 
      return this; 
     } 

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


     public long insertTitle(ContentValues initialValues,String TableName) 
     { 


      return db.insert(TableName, null, initialValues); 
     } 




} 

次のコードを使用して、必要なアクティビティからデータを挿入します。

MyDB mmdb=new MyDB(getBaseContext()); 
       mmdb.open(); 

initialValues = new ContentValues(); 
          initialValues.put("ID", ID); 
          initialValues.put("CS", CS); 
          initialValues.put("CN", CN); 
          initialValues.put("DN", DN); 



         mmdb.insertTitle(initialValues,"tabletest1"); 

mmdb.close(); 
+0

これらのテーブル間に接続がなくても、複数のDBではなく同じDB内に複数のテーブルを作成することをお勧めしますか? –