2016-07-28 3 views
0

이미 제 3자를 사용하는 응용 프로그램에 데이터베이스가 있습니다 library. 라이브러리에 드롭 테이블 기능이없는 것 같습니다. 그래서 직접 SQLiteOpenHelper API를 사용하여 변경하려고 생각했습니다. 이것이 가능한가?Android에서 SQL 쿼리 수동 실행

SQLiteOpenHelper를 확장하고 라이브러리에 사용 된 것과 동일한 db 이름을 지정하는 클래스를 만들었습니다.

그리고 내가 만든 db 클래스를 반영하는지 확인하기 위해 Application 클래스에서 초기화합니다.

SQLiteDatabase db = new SqliteDatabaseHelper(this).getReadableDatabase(); 
L.w("version: " + db.getVersion()); 
L.w("path: " + db.getPath()); 

SqliteDatabaseHelper helper = new SqliteDatabaseHelper(this); 
helper.onUpgrade(db, 1, 2); // this line suppose to invoke the drop table query 

앱을 실행할 때 onUpgrade() 메서드가 호출되지 않는 것 같습니다.

네가 본래의 SQLite 도우미를 사용한 경험이 전혀 없기 때문에 나는 여기서 무슨 일이 일어나는지 전혀 모른다. 내 목적은 onUpgrade의 쿼리가 실행되는지 여부를 확인하는 것입니다. 그러나 테이블은 여전히 ​​데이터베이스에 있습니다.

어떻게이 문제를 해결할 수 있습니까?

+0

코드에서 상수'DATABASE_VERSION'을 정수 이상으로 변경하면 onUpgrade()가 호출됩니다. 원래 질문에 관해서는 좀 더 자세한 정보가 필요합니다. SQLiteHelper 클래스와 라이브러리 모두 동일한 데이터베이스에 액세스 할 수는 있지만 라이브 록 및 교착 상태와 데이터 무결성에주의해야합니다. – NitroNbg

+0

알겠습니다. 정보 주셔서 감사합니다. 그렇다면 onUpgrade를 명시 적으로 호출 할 필요가 없습니다. DATABASE_VERSION 만 변경하면됩니다. 맞습니까? – AimanB

+0

예. 다음에'SQLiteOpenHelper'를 호출 할 때'super (context, DATABASE_NAME, null, DATABASE_VERSION);는 장치 저장소의 데이터베이스가 실행중인 응용 프로그램이 필요로하는 데이터베이스와 일치하는지 확인합니다. – NitroNbg

답변

1

SQLiteOpenHelper 클래스는 자신의 데이터베이스 버전 관리에 도움이됩니다.

타사 코드로 관리되는 데이터베이스에는이 코드를 사용하지 마십시오.

바로 데이터베이스를 openDatabase()으로 엽니 다.