31

を使用してAndroid携帯でローカルデータベースを作成しようとしていますsqlite

以下に示すように、データベースを作成して「ヘルプ」を提供するために使用されるヘルパークラスがあります。

コードの主要部分にこのクラスのオブジェクトを作成したいと思っています。このオブジェクトは、データベースとテーブルも作成します。

問題:

onCreateクラスのオブジェクトを作成するときはいつでも、ヘルパーのメソッドを呼び出していないようです。私はこれが起こるはずだと思った。onCreate基本的にはクラスのコンストラクターだと思いました。(私は間違っていると思います)

  • では、なぜonCreateメソッドを呼び出さないのですか?
  • または、クラスのオブジェクトを作成しているデータベースとテーブルを作成するにはどうすればよいですか?
  • これが良いアプローチではない場合、これを行うためのより良い方法は何でしょうか?

public class SmartDBHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME = "smart_lite_db.db";
    private static final int DATABASE_VERSION = 2;
    private static final String NOTIFY_TABLE_NAME = "user_notify_data";
    private static final String HR_TABLE_NAME = "user_hr_data";
    private static final String NOTIFY_TABLE_CREATE = 
        "CREATE TABLE " + NOTIFY_TABLE_NAME + 
        " (counter INTEGER PRIMARY KEY, " + 
        "userresponse INTEGER, " + 
        "notifytime INTEGER);";
    private static final String DATA_TABLE_CREATE = 
        "CREATE TABLE " + HR_TABLE_NAME +
        " (counter INTEGER PRIMARY KEY, " +
        "hr INTEGER, " +
        "act INTEGER, " +
        "timestamp INTEGER);";      

    public SmartDBHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
        // TODO Auto-generated constructor stub
    }


    @Override
    public void onCreate(SQLiteDatabase db) {
        // TODO Auto-generated method stub
        Log.v("smartdbhelper", "before creation");
        db.execSQL(NOTIFY_TABLE_CREATE);
        Log.v("smartdbhelper", "middle creation");
        db.execSQL(DATA_TABLE_CREATE);
        Log.v("smartdbhelper", "after creation");
    }


    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
        // TODO Auto-generated method stub

    }

}

public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
   private SmartDBHelper dBHelper;
   public void onCreate(Bundle savedInstanceState) {
      //where i am wanting to create the database and tables
      dBHelper = new SmartDBHelper(getContext());
   }
}
4

3 に答える 3

69

onCreateデータベースクラスのコンストラクタではありません。存在しないデータベースを開こうとした場合にのみ呼び出されます。データベースを開く/作成するには、次のいずれかのメソッドへの呼び出しを追加する必要があります。

public class SmartApp extends Activity implements OnSharedPreferenceChangeListener {
   private SmartDBHelper dBHelper;
   public void onCreate(Bundle savedInstanceState) {
      //where i am wanting to create the database and tables
      dBHelper = new SmartDBHelper(getContext());
      // open to read and write
      dBHelper.getWritableDatabase();
      // or to read only
      // dBHelper.getReadableDatabase();
   }
}

少し大きいですが、こちらが私のDatabaseAdapterです。http://saintfeintcity.org/projects/sfc/repository/entry/trunk/src/org/saintfeintcity/database/GameDbAdapter.javaをご覧ください。

于 2011-02-17T01:48:01.233 に答える
14

getWritableDatabase()またはに電話する必要がありgetReadableDatabase()ます。

于 2011-02-17T01:43:24.913 に答える
1

oncreate()メソッドはコンストラクターではなく、データベースを初めて作成するときにも呼び出されます。したがって、データベースを開くか作成するには、getWritableDatabase()またはgetReadableDatabase()を呼び出す必要があります。

getReadableDatabase():-データベースを作成および/または開きます。

getWritableDatabase():-読み取りおよび書き込みに使用されるデータベースを作成および/または開きます。

于 2018-09-14T06:21:43.867 に答える