>

앱을 제거한 후 다시 설치 한 후에도 onCreate 메소드가 호출되지 않습니다.

Database.java :

public class Database extends SQLiteOpenHelper {
    public static SQLiteDatabase db;
    public Database(Context context) {
        super(context,"db", null, 1);
        Log.i("DB", "dbManager");
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        Log.i("DB", "dbOnCreate");
        String s = "CREATE TABLE test(id INTEGER);";
        db.execSQL(s);
    }
    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
        Log.i("DB", "dbOnUpgrade");
    }
}

나는 이것을 부른다 :

Database db = new Database(this);

출력 :

07-17 12:42:03.053 16448-16448/com.package.app I/DB: dbManager

이 문제는 무엇이며 어떻게 해결합니까?

  • 답변 # 1

    public class Database extends SQLiteOpenHelper {
        public static SQLiteDatabase db;
        public Database(Context context) {
            super(context,"db", null, 1);
            getReadableDatabase(); // <-- add this, which triggers onCreate/onUpdate
            Log.i("DB", "dbManager");
        }
        @Override
        public void onCreate(SQLiteDatabase db) {
            Log.i("DB", "dbOnCreate");
            // ...
        }
        // ...
    }
    
    

    설명 : 쓰기 또는 읽기를 위해 db에 액세스 한 경우에만 업데이트가 트리거됩니다. 당신이 그것을 시도하지 않기 때문에, onCreate  호출되지 않습니다.

    보통, 당신은 데이터베이스 클래스의 메소드를 어딘가에 (예를 들어 엔터티를 쿼리하기 위해) 호출 할 것이고 그것은 onCreate 의 순간입니다. / (또는 onUpdate )가 호출됩니다.

    이러한 메소드가 없기 때문에 (현재) 데이터베이스 생성자 안에서 호출하면됩니다.

    또는

    또는 pyzwyz에 전화하는 것이 더 깨끗할 수도 있습니다.  데이터베이스 객체 생성 직후 :

    getReadableDatabase()
    
    

  • 답변 # 2

    Database db = new Database(this);
    db.getReadableDatabase();
    
    

    와이즈 비즈

    와 함께 시도

    @Override
    public void onCreate(SQLiteDatabase db) {
       // ...
    }
    
    

    제거앱을 실행 한 후 다시 실행하십시오.

  • 답변 # 3

    데이터베이스 클래스에 대해 getReadableDatabase () 또는 getWritableDatabase () 메소드를 호출해야합니다. 데이터베이스에 데이터를 쓰거나 업데이트하려면

    onCreateCalled when the database is created for the first time. This is where the creation of tables and the initial population of the tables should happen.

    를 사용하십시오.  데이터베이스에서 데이터를 얻으려면 String s = "CREATE TABLE IF NOT EXISTS test (id INTEGER PRIMARY KEY);"; 를 사용하십시오.

    getWritableDatabase()
    
    

    그런 다음 데이터베이스의 데이터 쓰기, 가져 오기, 업데이트 또는 삭제에 적절한 방법을 사용하십시오. 예를 들면 다음과 같습니다.

    getReadableDatabase()
    
    

    Database dbHelper = new Database(this); SQLiteDatabase db = dbHelper.getReadableDatabase(); SQLiteDatabase db = dbHelper.getWritableDatabase();

관련 자료

  • 이전 java - android studio에서 android sdk를 설치하거나 찾을 수 없습니다
  • 다음 sql - PARSENAME 함수가 이상하게 동작 함