2010-04-20 2 views
4

그래서 시장에 앱이 있으며 업데이트로 데이터베이스에 일부 열을 추가하려고합니다. 지금까지 문제 없음. 그러나 사용중인 데이터베이스에이 열이 누락되어 있는지 감지하고이 경우 해당 열을 추가하려고합니다. 응용 프로그램이 이전 데이터베이스를 계속 가져올 수 있기 때문에 새 버전을 업데이트 한 후에 동적으로 수행해야합니다. 일반적으로 PRAGMA 쿼리를 사용할 수는 있지만 Android에서이 작업을 수행하는 방법은 확실하지 않습니다. 그것은 질의이므로 execSQL을 사용할 수 없으며 PRAGMA를 query() - 함수와 함께 사용하는 방법을 알지 못합니다.테이블에 Android/sqlite의 열이 포함되어 있는지 감지합니다.

Ofcourse 물론 예외를 잡아서 열을 추가하거나 작업을 시작하기 전에 항상 각 테이블에 열을 추가 할 수 있습니다.하지만 이것은 깔끔한 해결책이 아닙니다.

건배,

답변

11

프라그마가 작동합니다. 예를 들어, 필자는 Android App DB 중 하나에서 방금 시도했습니다.

sqlite> pragma table_info (userCommand); 

cid name  type notnull  dflt_value pk 
0 id  INTEGER  0  1 
1 description TEXT 0  0 
2 message  TEXT 0  0 

우리가 알 수있는 것처럼 지정된 테이블에는 세 개의 필드가 있습니다. ID, 설명 및 메시지

Cursor c = null; 
c = RawQuery ("pragma table_info (userCommand)",null); 
// if c has records and is not null then iterate through the records in search of your table name. 

가난한 서식을 용 서하십시오 :

그래서 앱에서, 같은 것을 사용합니다.

0

다음과 같은 명령을 실행하고 결과를 가서 당신의 열이 나열되어 있는지 볼 수 있었다.

pragma table_info(table_name); 

편집 : 나는 안드로이드에 해본 적이 없다,하지만 난 그것을

+0

질문 : '( – pgsandstrom

+0

내 나쁜. 내가 말했듯이. 안드로이드에서 그것을 시도하지. 원시 쿼리에 관한 CommonsWare의 제안을보십시오. –

3

이 과잉 될 수있다 일을해야한다고 생각하지만, 당신은 커서 사용에 테이블에서 단일 행을 선택할 수 있습니다 Cursor.getColumnIndex ([열의 이름]). 존재하지 않으면 -1을 반환합니다.

+0

..... 좋은 해킹 ..... –

3

대신 PRAGMArawQuery()을 사용해보십시오.

관련 문제