2012-10-19 5 views
0

Sqlite 작업에 사용될 클래스 DatabaseInterface을 생성했습니다. DatabaseInterface.onCreate() (어디에서 테이블을 만들었습니까?)이 클래스의 개체를 만들 때 메서드가 실행되지 않습니다.Sqlite 데이터베이스 사용. onCreate() 메서드가 실행되지 않습니다

내가 다른 클래스 FirstTimeActivity

public class FirstTimeActivity extends Activity{ 

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

    DatabaseInterface db = new DatabaseInterface(this); 
    } 
} 

DatabaseInterface의 객체를 생성 한 다음은 DatabaseInteface의 클래스 정의이다. OnCreate() 메서드가 실행되지 않아 내 테이블이 만들어지지 않습니다. 데이터베이스가 이미 작성되었습니다. 당신이 DatabaseInterface 객체에 getWritableDatabase()를 호출 할 때까지 데이터베이스가 실제로 만들어지지 않습니다

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 
} 

}; 

답변

2

** 새로운 정보로 편집 **

은 문제가 있다는 것 같다 당신의 DB 이미 생성 되었기 때문에 운영 체제는 onCreate를 실행할 필요가 없습니다. 동시에 테이블 생성을 포함하도록 DB를 작성하는 방법을 다시 생각해 보거나 테이블이 없으면 수동으로 테이블을 삽입하십시오.

+0

나는 데이터베이스가 실제로 생성 될 때 'openOrCreate'와 그와 비슷한 것으로 생각했다. 참조 된 것과 반대입니다. – Doomsknight

+0

@Martyn 나는 insertIntoDB() 메서드가 빠졌습니다. SQLiteDatabase db = this.getWritableDatabase(); – swastican

+0

@Martyn 내가 시험해 보도록하겠습니다. 감사. – swastican

0

나는 동일한 문제가있었습니다.

db.getWritableDatabase()를 처음 실행할 때 데이터베이스에 버그가 발생하여 데이터베이스가 성공적으로 만들어지지 않았습니다. 안드로이드 장치 모니터에서 탐색 할 경우 App 폴더 아래에 .db 파일이 없었기 때문에 버그를 수정 한 후 OnCreate가 호출 될 것이라고 생각했습니다. - 그렇지 않았어. 그런 다음 에뮬레이터에서 응용 프로그램을 제거하고 올바른 버전의 코드로 다시 설치하면 Oncreate 함수가 호출되고 .db 파일이 성공적으로 만들어졌습니다.

관련 문제