Я пытаюсь создать базу данных SQLite для своего приложения для Android.
Все работало нормально, пока я не получил JUnit Testing для функции запроса в ContentProvider.SQLiteException: нет такого столбца Android
Я читаю форум очень в глубине, и увидел, что некоторые люди имеют ошибки ниже
Создать таблицу имеет опечаток в нем - вот мое заявление создания таблицы
CREATE TABLE фильм (
_id INTEGER PRIMARY KEY,
название TEXT NOT NULL,
Обзор TEXT DEFAULT 'НЕТ Обзор',
poster_path TEXT DEFAULT 'NO АФИША',
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
Мой метод TestCase, который бросает ошибку.
Ошибка бросают на линии курсора 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; поэтому, когда я определил «выбор», он бросает мне «no такой столбец», но если я поместил все нуль, помимо URI, он выкинет исключение Unknown 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
. Попробуйте удалить приложение с вашего устройства и снова заново установите его –