0

DatabaseInterfaceSqlite操作に使用される クラスを作成しました。DatabaseInterface.onCreate()(テーブルを作成した場合)このクラスのオブジェクトを作成すると、メソッドが実行されません。

DatabaseInterface別のクラスのオブジェクトを作成しましたFirstTimeActivity

public class FirstTimeActivity extends Activity{

    public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    DatabaseInterface db = new DatabaseInterface(this);
    }
}

以下はのクラス定義ですDatabaseInteface。メソッドが実行されOnCreate()ていないため、テーブルが作成されていません。データベースはすでに作成されています。

public class DatabaseInterface  extends SQLiteOpenHelper{

    private static String       DB_NAME = "SMS_DB";
    private static int          DB_VERSION = 1;

    private String TABLE_NAME       = "SENT_ITEMS";
    private String COLUMN_ID        = "S_NO";
    private String COLUMN_MESSAGE   = "MESSAGE";
    private String COLUMN_DATETIME  = "DATE_TIME";

    //creates the database
    public DatabaseInterface(Context context) {
            super(context, DB_NAME, null, DB_VERSION);
            Log.d("Creating Database: ", "Creating Database");
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
            Log.d("Creating Table: ", "Creating Table");
            String create_table = "CREATE TABLE "+ TABLE_NAME + " ("+ COLUMN_ID +" INTEGER PRIMARY KEY, " + COLUMN_MESSAGE + " TEXT, " + COLUMN_DATETIME + "TEXT NOT NULL); ";
            db.execSQL(create_table);
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }

    public void insertIntoDB(String message)
{
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues values = new ContentValues();

    //get current date and time
    Calendar current_time = Calendar.getInstance();
    //current_time.getTime();
    String Cure = current_time.toString();
    Log.d("Current_Date_time: ", Cure);

    values.put(COLUMN_MESSAGE, message);
    values.put(COLUMN_DATETIME, "ad");

    db.insert("TEST", null, values);
    db.close(); // Closing database connection
}

};
4

2 に答える 2

2

DatabaseInterface オブジェクトで getWritableDatabase() を呼び出すまで、データベースは実際には作成されません。

** 編集 **

新しい情報では、DB が既に作成されていることが問題のようです。したがって、OS は既に作成されているため、onCreate を実行する必要はありません。同時にテーブルの作成を含めるように DB を作成する方法を再考するか、テーブルが存在しない場合は手動でテーブルを挿入します。

于 2012-10-19T17:09:40.830 に答える
0

私も同じ問題を抱えていました。電話エミュレーターでアプリを削除して再インストールすることで解決しました。

初めて db.getWritableDatabase() を実行したときにコードにバグがあり、データベースが正常に作成されませんでした。Android Device Monitor を参照すると、App フォルダーの下に .db ファイルがなかったので、バグを修正した後に OnCreate が呼び出されると思っていました。――そうではありませんでした。次に、エミュレーターでアプリをアンインストールし、正しいバージョンのコードで再インストールすると、Oncreate 関数が呼び出され、.db ファイルが正常に作成されました。

于 2016-08-01T14:13:43.023 に答える