SQLiteException: 没有这样的列 Android

SQLiteException: no such column Android

我正在尝试为我的 Android 应用程序创建一个 SQLite 数据库。
一切正常,直到我进入 ContentProvider 中的查询功能的 JUnit 测试。

我很深入地阅读了论坛,看到有些人有以下错误

  1. Create table 有拼写错误 - 这是我的 table 创建声明

    创建 TABLE 电影(
    _id 整数主键,
    标题文本不为空,
    默认文本 'NO OVERVIEW'、
    poster_path 文本默认值 'NO POSTER'、
    release_date 文本默认 'NO DATE AVAILABLE',
    vote_average 文本默认 'NO VOTES YET',
    sort_type 整数不为空,
    最喜欢的整数默认值 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 方法抛出错误。
在 Cursor 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 中的查询方法;所以当我定义 'selection' 时,它会抛出 'no such column' 但如果我把所有 null,除了 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

请更改这些行:

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