Android SQLite 데이터베이스에 새 열을 추가하는 방법은 무엇입니까?
Android SQLite
데이터베이스에 한 가지 문제가 있습니다.
하나의 field. StudentFname을 포함하는 하나의 테이블이 있고 해당 응용 프로그램은 Android 2.3.1에서 제대로 작동하며 이제 다른 필드를 추가하면 응용 프로그램이 제대로 작동하지 않습니다.
데이터베이스를 잘 아는 사람이 나를 도울 수 있습니까?
다음 과 같이 메소드에서 ALTER TABLE
함수를 사용할 수 있습니다 onUpgrade()
.
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// If you need to add a column
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE foo ADD COLUMN new_column INTEGER DEFAULT 0");
}
}
분명히 SQLite는 열 정의에 따라 늘어납니다.
내 앱에 대한 도움이 필요할 때마다 연설을 들었습니다. 다음을 수행하는 것이 좋습니다.
private static final String DATABASE_ALTER_TEAM_1 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_COACH + " string;";
private static final String DATABASE_ALTER_TEAM_2 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_STADIUM + " string;";
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL(DATABASE_ALTER_TEAM_1);
}
if (oldVersion < 3) {
db.execSQL(DATABASE_ALTER_TEAM_2);
}
}
사용자가 둘 이상의 버전을 업그레이드 할 때 코드가 작동하고 업데이트해야합니다. 이에 대한 자세한 내용은이 블로그를 확인하십시오 .
작업을 수행이하는 추론 쉬운 방법은 몇 가지 추가하는을 구석으로입니다 SQL to the onUpgrade()
귀하의 방법을 SQLiteOpenHelper class
. 다음과 같은 것 :
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// If you need to add a new column
if (newVersion > oldVersion) {
db.execSQL("ALTER TABLE student ADD COLUMN student_rollno INTEGER DEFAULT 0");
}
}
if / then 대신 스위치를 사용하는 약간 더 우아한 접근 방식이 어떤 스키마에서 최신 스키마로 업그레이드 할 수 있습니다.
다음은 테이블 변경 구문에 대한 적절한 페이지입니다. http://alvinalexander.com/android/sqlite-alter-table-syntax-examples
public static final String TABLE_TEAM = "team";
public static final String COLUMN_COACH = "coach";
public static final String COLUMN_STADIUM = "stadium";
private static final String DATABASE_ALTER_TEAM_TO_V2 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_COACH + " TEXT;";
private static final String DATABASE_ALTER_TEAM_TO_V3 = "ALTER TABLE "
+ TABLE_TEAM + " ADD COLUMN " + COLUMN_STADIUM + " TEXT;";
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion)
{
case 1:
//upgrade from version 1 to 2
db.execSQL(DATABASE_ALTER_TEAM_TO_V2);
case 2:
//upgrade from version 2 to 3
db.execSQL(DATABASE_ALTER_TEAM_TO_V3);
//and so on.. do not add breaks so that switch will
//start at oldVersion, and run straight through to the latest
}
}
@ Aamirkhan.i는 오래 전에 게임에서 한 문제를 해결하고 있다고 생각합니다. 데이터베이스 버전을 늘리지 않은 것입니다. 숫자는 여기에 대한 대답은 간단합니다. 테이블을 사용하기 때문에 데이터베이스 버전 번호를 늘리거나 변경하지 않은 사람에게 도움이 될 수 있기 때문에 글을 쓰고 있습니다.
그런 상태를 확인하면 안될 것 같아요
if (newVersion > oldVersion) {
}
이를 사용하면 데이터베이스 버전을 늘릴 때마다 onUpdrade ()가 호출되고 조건이 true로 다음과 같이 확인해야합니다.
if(oldVersion==1)
{
}
따라서이 경우 이전 버전이 2이면 조건이 거짓이되고 이전 버전 2를 사용하는 사용자는 데이터베이스를 업데이트하지 않을 것입니다 (사용자가 버전 1에 있고 원하는 경우).
나는 다음과 같은 접근 방식을 수행했습니다.
DB 버전 : 6
Ex : There is a table with 5 columns
업그레이드 할 때 : 7 (3 개의 테이블에 1 개의 새 열을 추가합니다)
1. We need to add the columns when creating a table
2. onUpgrade method:
if (oldVersion < 7)
{
db.execSQL(DATABASE_ALTER_ADD_PAPER_PAID);
db.execSQL(DATABASE_ALTER_LAST_UPLOADED);
db.execSQL(DATABASE_ALTER_PAPER_LABEL);
}
Where : "DATABASE_ALTER_ADD_PAPER_PAID"는 쿼리입니다.
EX: public static final String DATABASE_ALTER_ADD_PAPER_PAID = "ALTER TABLE "
+ TableConstants.MY_PAPERS_TABLE + " ADD COLUMN " + COLUMN_PAPER_PAID + " TEXT;";
위의 두 작업 후 새로 설치 사용자 및 앱 업그레이드 사용자에게 잘 작동합니다.
테이블에 새 열을 추가하려면을 사용해야 ALTER
합니다. 안드로이드에서는 onUpgrade()
.
onUpgrade()
새 열을 어떻게 추가 할 것인지 궁금 할 것입니다.
의 서브 클래스를 구현할 때 SQLiteOpenHelper
클래스 생성자 super(context, DB_NAME, null, 1);
에서 슈퍼 클래스 constructor :를 호출해야합니다 . 나는 1
버전 을 통과 했습니다.
버전 1
을 above ( 2
이상)로 변경 onUpgrade()
하면 호출됩니다. 그리고 내가하려는 SQL 수정을 수행하십시오. 버전을 변경 한 후 내 클래스 생성자 :
public DatabaseHelper(Context context) {
super(context, DB_NAME, null, 2);//version changed from 1 to 2
}
SQL 수정은 이와 같이 확인하고, 수퍼 클래스 생성자는 저장된 SQLite db 파일의 버전을 내가 전달한 버전과 비교합니다 super()
. 이러한 (이전 및 현재) 버전 번호가 다른 onUpgrade()
경우 호출됩니다.
코드는 다음과 같아야합니다.
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
// add new columns to migrate to version 2
if (oldVersion < 2) {
db.execSQL("ALTER TABLE " + TABLE_NAME + "ADD COLUMN school VARCHAR(250)");
}
// add new columns to migrate to version 3
if (oldVersion < 3) {
db.execSQL("ALTER TABLE " + TABLE_NAME + "ADD COLUMN age INTEGER");
}
}
같은 문제를 검색하는 동안 링크를 발견했습니다. 업그레이드 사용 방법을 설명합니다. https://thebhwgroup.com/blog/how-android-sqlite-onupgrade
아래 코드를 사용하는 이유를 설명합니다.
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (oldVersion < 2) {
db.execSQL(DATABASE_ALTER_TEAM_1);
}
if (oldVersion < 3) {
db.execSQL(DATABASE_ALTER_TEAM_2);
}
}
테이블에 새 열을 만드는 가장 쉬운 방법은 SQLiteOpenHelper 클래스의 onUpgrade () 메서드에 SQL을 추가하는 것입니다. 처럼:
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
switch (oldVersion) {
case 1:
db.execSQL(SQL_MY_TABLE);
case 2:
db.execSQL("ALTER TABLE myTable ADD COLUMN myNewColumn TEXT");
}
}
코드를 변경하기 만하면됩니다.
개인 최종 int DATABASE_VERSION = 1;
...에
개인 정적 최종 정수 DATABASE_VERSION = 2;
참고 URL : https://stackoverflow.com/questions/8291673/how-to-add-new-column-to-android-sqlite-database
'ProgramingTip' 카테고리의 다른 글
Vim / Vi에 커서를 끝으로 이동하는 명령이 검색 하이라이트? (0) | 2020.10.15 |
---|---|
chart.js는 완전히 새로운 데이터를로드합니다. (0) | 2020.10.15 |
로그인을 루트 페이지로 설정 (0) | 2020.10.15 |
Android Studio를 사용하여 에뮬레이터 인스턴스에 파일을 푸시하는 방법 (0) | 2020.10.15 |
일상 벡터에서 숫자 추출 (0) | 2020.10.15 |