2010-04-20 161 views
4

因此,我在市場上有一個應用程序,並且有更新,我想向數據庫添加一些列。目前沒有問題。但是我想檢測正在使用的數據庫是否缺少這些列,並在這種情況下添加它們。我需要動態完成此操作,而不僅僅是在更新到新版本之後,因爲應用程序應該仍能夠導入較舊的數據庫。通常我可以使用PRAGMA查詢,但我不知道如何使用Android來做到這一點。我不能使用execSQL,因爲它是一個查詢,我無法弄清楚如何在查詢()函數中使用PRAGMA。檢測表中是否包含Android/sqlite中的列

Ofcourse我可以只是捕捉異常,然後添加列,或者始終將列添加到每個表之前,我開始使用它,但這不是一個整潔的解決方案。

乾杯,

回答

11

Pragma的作品。作爲一個例子,我剛剛在我的Android應用程序數據庫中嘗試過它。

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); 

編輯:我從來沒有這樣做在Android,但我認爲它應該工作

+0

我HAVA已經嘗試過這一點,因爲在這個問題規定:。。。「( – pgsandstrom 2010-04-20 13:42:21

+0

我的壞就像我說沒有嘗試過Android上的嘗試CommonsWare的關於rawQuery – 2010-04-20 14:15:46

3

這可能是矯枉過正,但您可以從表中選擇一個行插入光標和使用Cursor.getColumnIndex([列名稱作爲字符串])。這將返回-1,如果它不存在。

+0

.....尼斯黑客建議..... – 2013-01-16 08:03:49

3

嘗試使用PRAGMArawQuery()而不是query()

相關問題