Detect if a table contains a column in Android/sqlite

陌路散爱 提交于 2019-12-01 18:53:42

问题


So I have an app on the market, and with an update I want to add some columns to the database. No problems so far. But I want to detect if the database in use is missing these columns, and add them if this is the case. I need this to be done dynamically and not just after the update to the new version, because the application is supposed to still be able to import older databases. Normally I would be able to use the PRAGMA query, but Im not sure how to do this with Android. I cant use execSQL since it is a query, and I cant figure out how to use PRAGMA with the query()-function.

Ofcourse I could just catch exceptions and then add the column, or always add the columns to each table before I start to work with it, but that is not a neat solution.

Cheers,


回答1:


Pragma works. As an example I just tried it on one of my Android App DBs.

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

As we can see there are three fields in the specified table. id, description, and message.

So in your app, use something like:

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. 

Please excuse the poor formatting.




回答2:


This may be overkill, but you can select a single row from your table into a Cursor and use Cursor.getColumnIndex([column name as string]). This will return -1 if it doesn't exist.




回答3:


Try using PRAGMA with rawQuery() instead of query().




回答4:


You could issue the following command and go over the results and see if your column is listed.

pragma table_info(table_name);

Edit: I've never done this on Android, but I think it should work



来源:https://stackoverflow.com/questions/2675388/detect-if-a-table-contains-a-column-in-android-sqlite

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!