向SQLite数据库内新增列,之前出现过报错为提示no such column,通过删除并重建数据库文件解决,这次报错为无效的数据列:
java.lang.IllegalArgumentException: Invalid column C
问题原因:
ContentProvider 在关联数据库时须定义UriMatcher并将新增列写入对应Hashmap,否则无法识别到数据表的列值。
解决办法:
在ContentProvider的子类里定义 UriMatcher及Hashmap,并写入列名
public class A extends ContentProvider { public static final String C ="c"; private static UriMatcher uriMatcher; private NoteDatabaseOpenHelper mDbhelper; private static HashMap<String, String> sProjectionMap; static{ uriMatcher = new UriMatcher(UriMatcher.NO_MATCH); uriMatcher.addURI(Entity.AUTHORITY, Entity.TABLE_NOTE, NOTE_DIR); uriMatcher.addURI(Entity.AUTHORITY, Entity.TABLE_NOTE + "/#", NOTE_ITEM); sProjectionMap = new HashMap<String, String>(); sProjectionMap.put(Entity.C, Entity.C); //此处写入 }