非常にうまく文書化されている SQLiteOpenHelper クラスのこの優れた例を見つけました。これを自分のアプリケーションに使用できると思います。問題は、アプリによって作成されたデータベースが既に存在するかどうかを判断するのにまだ苦労していることです
私のアプリにはメイン アクティビティ Java クラス [想像上の名前] ' ActivityMain
' があり、現時点では void を呼び出していますdbTest();
public void DBTest() {
SQLiteDatabase myDB = null;
/* Create a Database. */
try {
myDB = this.openOrCreateDatabase(DATABASE_NAME, MODE_PRIVATE, null);
/* Create a Table in the Database. */
myDB.execSQL("CREATE TABLE IF NOT EXISTS "
+ DATABASE_TABLE
+ " (" + KEY_ID + " integer primary key autoincrement, "
+ KEY_SCRIPT_NAME + " text, " + KEY_SCRIPT_BODY + " text, "
+ KEY_SU_NEEDED + " short);");
/* Insert data to a Table*/
myDB.execSQL("INSERT INTO "
+ DATABASE_TABLE
+ " (" + KEY_SCRIPT_NAME
+ ", " + KEY_SCRIPT_BODY
+ ", " + KEY_SU_NEEDED + ")"
+ " VALUES ('CPU information', 'cat /proc/cpuinfo', 1);");
/*retrieve data from database */
Cursor c = myDB.rawQuery("SELECT * FROM " + DATABASE_TABLE, null);
int scriptName = c.getColumnIndex("name");
// Check if our result was valid.
c.moveToFirst();
// cursor left as it came from the database because it starts at the row before the first row
ArrayList<String> sData = new ArrayList<String>();
if (c != null) {
do {
String Name = c.getString(scriptName);
sData.add(Name);
} while (c.moveToNext());
}
ListView lv = (ListView) findViewById(R.id.mainListView);
lv.setAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_multiple_choice, sData));
lv.setChoiceMode(ListView.CHOICE_MODE_MULTIPLE);
} catch (Exception e) {
Log.e("Error", "Error", e);
} finally {
if (myDB != null)
myDB.close();
}
そこにデータベースを作成し、行を挿入してから ListView に表示します。現在、これはアプリが起動されるたびに同じ行を挿入するだけなので、データベースが既に存在するかどうかを確認したいと思います。
そこにいくつかの初期値でデータベースを開始させたいので、データを挿入しています。ユーザーは、必要に応じてデータを削除できます
したがって、私の ' ' クラスでは、リンクされたサンプルから使用した ' ' クラスからメソッドActivityMain
を呼び出したいのですが、できませんcreateDataBase();
DatabaseHelper
それは次のようなものですか:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.layout_main);
try {
createDataBase();
catch(SQLiteException e){
// database doesn't exist yet.
return false;
}
' ' クラスに正常に動作するブール関数がありますActivityMain
が、これが正しい方法であるかどうかはわかりません。実際には、ヘルパー クラスを介してこれらすべてを実行する必要があります。
private boolean checkDatabase() {
SQLiteDatabase checkDB = null;
try {
checkDB = SQLiteDatabase.openDatabase(DB_FULL_PATH, null,
SQLiteDatabase.OPEN_READONLY);
checkDB.close();
} catch (SQLiteException e) {
// database doesn't exist yet.
return false;
}
return checkDB != null ? true : false;
}
誰かが私にいくつかの指針を教えてもらえますか?
どうもありがとう :)