2015-10-18 2 views
0

Я пытаюсь создать базу данных SQLite для своего приложения для Android.
Все работало нормально, пока я не получил JUnit Testing для функции запроса в ContentProvider.SQLiteException: нет такого столбца Android

Я читаю форум очень в глубине, и увидел, что некоторые люди имеют ошибки ниже

  1. Создать таблицу имеет опечаток в нем - вот мое заявление создания таблицы

    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
    );

  2. Не обновляется константа Database_Version после добавления столбца.
    Я попытался обновить константу Database_Version, и я также попытался изменить имя базы данных, поэтому она создается с нуля.

  3. Удалено все мое старое приложение с моего устройства Android.

  4. Прочитано 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

+0

Поля провайдера контента являются деликатный случай. 'MovieContract.Movie.FAVORITE' - это не то же самое, что 'MovieContract.Movie.favorite' – t0mm13b

+0

@ t0mm13b Хммм, никогда не новый об этом, но точка взята. Я изменил их на нижний регистр, но он все еще не решает проблему. Я обновил сообщение об ошибке выше – Jenny

+0

. Попробуйте удалить приложение с вашего устройства и снова заново установите его –

ответ

1

Пожалуйста, измените эти строки:

String selection = "MovieContract.Movie.FAVORITE = ?"; 
String [] selectionArgs = new String [] {"'1'"}; 
String sortOrder = "MovieContract.Movie.TITLE"; 

к

String selection = MovieContract.Movie.FAVORITE + " = ?"; 
String [] selectionArgs = new String [] {"1"}; 
String sortOrder = MovieContract.Movie.TITLE; 

или к (будет работать, а)

String selection = "favorite = ?"; 
String [] selectionArgs = new String [] {"1"}; 
String sortOrder = "title"; 
Смежные вопросы