![](/img/trans.png)
[英]How to check if a column is not null in Android SQLite database table
[英]Check for specific column in Android SQLite database
我试图在调用onUpgrade()时检查我的数据库中是否有特定的列。 有没有一种简单的方法来检查
if(database does not have specific column){
db.execSQL("ALTER TABLE table" + " ADD COLUMN column" );
}
我看到了其他一些答案, Pragma Table ,但我不知道如何使用它,甚至不知道它是什么。
找到了解决方案
try {
db.execSQL("ALTER TABLE notes" + " ADD COLUMN Week");
} catch (SQLException e) {
Log.i("ADD COLUMN Week", "Week already exists");
}
好的,在你遇到更大的问题之前,你应该知道SQLite在ALTER TABLE命令上是有限的,它允许add
和rename
不删除/删除,这是通过重新创建表来完成的。
您应始终拥有新的表创建查询,并将其用于升级和传输任何现有数据。 注意:onUpgrade方法为您的sqlite帮助程序对象运行一个,您需要处理其中的所有表。
那么推荐使用什么升级:
if not exists
(我们正在进行升级,因此表可能还不存在,它将失败更改和删除) List<String> columns = DBUtils.GetColumns(db, TableName);
ALTER table " + TableName + " RENAME TO 'temp_" + TableName
) columns.retainAll(DBUtils.GetColumns(db, TableName));
) String cols = StringUtils.join(columns, ","); db.execSQL(String.format( "INSERT INTO %s (%s) SELECT %s from temp_%s", TableName, cols, cols, TableName));
) DROP table 'temp_" + TableName
) (这不会处理表降级,如果重命名列,则不会因列名不匹配而传输现有数据)。
。
public static List<String> GetColumns(SQLiteDatabase db, String tableName) {
List<String> ar = null;
Cursor c = null;
try {
c = db.rawQuery("select * from " + tableName + " limit 1", null);
if (c != null) {
ar = new ArrayList<String>(Arrays.asList(c.getColumnNames()));
}
} catch (Exception e) {
Log.v(tableName, e.getMessage(), e);
e.printStackTrace();
} finally {
if (c != null)
c.close();
}
return ar;
}
public static String join(List<String> list, String delim) {
StringBuilder buf = new StringBuilder();
int num = list.size();
for (int i = 0; i < num; i++) {
if (i != 0)
buf.append(delim);
buf.append((String) list.get(i));
}
return buf.toString();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.