我想为我的Android应用程序创建一个SQLite数据库。
一切工作正常,直到我在ContentProvider中查询功能的JUnit测试。SQLiteException:没有这样的列Android
我看了非常深入的论坛,看到有些人有以下
错误创建表中有错别字吧 - 这里是我的表创建语句
CREATE TABLE电影(
_id INTEGER PRIMARY KEY,
title TEXT NOT NULL,
overview TEXT DEFAULT'NO OVERVIEW',
poster_path TEXT DEFAULT'NO POSTER',
RELEASE_DATE TEXT DEFAULT '否可用日期',
vote_average TEXT DEFAULT '还没有投票',
SORT_TYPE INTEGER NOT NULL,
喜爱INTEGER DEFAULT 0
);添加列后未更新Database_Version常量。
我试着更新Database_Version常量,我也尝试更改数据库的名称,所以它从头开始创建。从我的Android设备中删除了我的所有旧应用程序。
阅读this post。
我确实检查了它所说的所有细微差别。
但是,我仍然有我抛出异常抛出错误
android.database.sqlite.SQLiteException: no such column: MovieContract.Movie.favorite (code 1): , while compiling: SELECT * FROM movie WHERE MovieContract.Movie.favorite = ? ORDER BY MovieContract.Movie.title
我的测试用例的方法。
错误被抛出就行光标movieCursor ...
public void testBasicMovieQuery(){
MovieDBHelper dbHelper = new MovieDBHelper(mContext);
SQLiteDatabase db = dbHelper.getWritableDatabase();
ContentValues movieValues = TestUtilities.createMovieValues();
long recordNum = db.insert(MovieContract.Movie.TABLE_NAME, null,movieValues);
assertTrue("Unable to Insert WeatherEntry into the Database", recordNum != -1);
db.close();
String selection = "MovieContract.Movie.FAVORITE = ?";
String [] selectionArgs = new String [] {"'1'"};
String sortOrder = "MovieContract.Movie.TITLE";
Cursor movieCursor = mContext.getContentResolver().query(
MovieContract.Movie.CONTENT_URI,
null,
selection,
selectionArgs,
sortOrder
);
TestUtilities.validateCursor("testBasicWeatherQuery", movieCursor, movieValues);
movieCursor.close();
}
这里是我的ContentProvider我的查询方法;所以当我有'选择'定义它会引发'没有这样的列',但如果我把所有的空,除了URI它会抛出未知的Uri异常从默认,即使Uri实际上存在于UriMatcher。
@Override
public Cursor query(Uri uri, String[] projection, String selection, String[] selectionArgs, String sortOrder) {
Cursor cursor;
Log.v("QUERY MovieProvider", uri.toString());
switch (uriMathcher.match(uri)){
case MOVIE_WITH_ID:{
Log.v("MovieProvider QUERY", "MOVIE WITH ID");
//cursor = getMovieWithId(uri);
cursor = dbHelper.getReadableDatabase().query(MovieContract.Movie.TABLE_NAME ,null, "MovieContract.Movie._ID =", selectionArgs,null,null,sortOrder);
}
break;
case MOVIE:{
Log.v("MovieProvider QUERY", "MOVIE");
//Log.v("MovieProvider QUERY", selection);
//Log.v("MovieProvider QUERY", selectionArgs[0]);
cursor = dbHelper.getReadableDatabase().query(MovieContract.Movie.TABLE_NAME, null,selection, selectionArgs, null, null, sortOrder);
}
default: {
throw new UnsupportedOperationException("Unknown uri: " + uri);
}
}
cursor.setNotificationUri(getContext().getContentResolver(), uri);
return cursor;
}
如果需要任何其他信息,请让我知道。
我Github上库是here
内容提供商字段区分大小写。 'MovieContract.Movie。FAVORITE'与'MovieContract.Movie.favorite'不一样' – t0mm13b
@ t0mm13b嗯,从来没有新的东西,但点了。我将它们改为小写,但仍不能解决问题。我更新了上面的错误消息 – Jenny
尝试从你的设备卸载你的应用程序,并重新安装它再次 –