NOT NULL约束失败,favourite.rating(代码1299 SQLITE_CONSTRAINT_NOTNULL)失败

时间:2019-09-25 01:48:02

标签: java android android-sqlite

按如下所示将数据添加到数据库时出现编译错误

  

2019-09-25 08:29:29.332 6458-6458 / com.mulazi.mymoviecatalogue E / SQLiteDatabase:插入标题错误70岁时从圣昆汀(San Quentin)胆大包天地逃到前所未有的一连串抢劫案,这些抢劫案使当局感到困惑,并使公众着迷。被追捕所困的是一名侦探,一名被福雷斯特(Forrest)对自己的手艺所迷恋的人,一名女性,尽管他选择了职业,但仍然爱着他。名称= null poster_path = https://image.tmdb.org/t/p/w500null rating_bar = null评级= null

     

android.database.sqlite.SQLiteConstraintException:NOT NULL约束失败:favorite.rating(代码1299 SQLITE_CONSTRAINT_NOTNULL)

     

在android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(本机方法)
  在android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:879)           在android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:790)           在android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:88)           在android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1599)           在android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1468)           在com.mulazi.mymoviecatalogue.db.FavoriteDbHelper.addFavorite(FavoriteDbHelper.java:64)           在com.mulazi.mymoviecatalogue.DetailActivity.saveFavorite(DetailActivity.java:141)           在com.mulazi.mymoviecatalogue.DetailActivity $ 1.onClick(DetailActivity.java:52)           在android.view.View.performClick(View.java:7251)           在android.view.View.performClickInternal(View.java:7228)           在android.view.View.access $ 3500(View.java:802)           在android.view.View $ PerformClick.run(View.java:27843)           在android.os.Handler.handleCallback(Handler.java:883)

我的FavDbHelper

package com.mulazi.mymoviecatalogue.db;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import com.mulazi.mymoviecatalogue.Model.Movie;

import java.util.ArrayList;
import java.util.List;

import static android.provider.BaseColumns._ID;

public class FavoriteDbHelper extends SQLiteOpenHelper {

    private static final String DATABASE_NAME ="favorite1.db";
    private static final int DATABASE_VERSION = 1;

    public  FavoriteDbHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase sqLiteDatabase) {

        final String SQL_CREATE_FAVORITE_TABLE = "CREATE TABLE " + FavoriteContract.FavoriteEntry.TABLE_NAME + " (" +
                FavoriteContract.FavoriteEntry._ID  + " INTEGER PRIMARY KEY AUTOINCREMENT," +
                FavoriteContract.FavoriteEntry.COLUMN_TITTLE + " TEXT, " +
                FavoriteContract.FavoriteEntry.COLUMN_POSTERPATH + " TEXT NOT NULL," +
                FavoriteContract.FavoriteEntry.COLUMN_OVERVIEW + " TEXT, " +
                FavoriteContract.FavoriteEntry.COLUMN_RATING_BAR + " INTEGER NOT NULL, " +
                FavoriteContract.FavoriteEntry.COLUMN_RATING +" TEXT NOT NULL ," +
                FavoriteContract.FavoriteEntry.COLUMN_RELEASE_DATE + " TEXT NOT NULL, " +
                FavoriteContract.FavoriteEntry.COLUMN_NAME + " TEXT " +
                ");";


        sqLiteDatabase.execSQL(SQL_CREATE_FAVORITE_TABLE);

    }

    @Override
    public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {

        sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + FavoriteContract.FavoriteEntry.TABLE_NAME);
        onCreate(sqLiteDatabase);

    }

    public void addFavorite(Movie movie) {
        SQLiteDatabase db = this.getWritableDatabase();

        ContentValues values = new ContentValues();
        values.put(FavoriteContract.FavoriteEntry.COLUMN_TITTLE, movie.getTitle());
        values.put(FavoriteContract.FavoriteEntry.COLUMN_POSTERPATH, movie.getPosterPath());
        values.put(FavoriteContract.FavoriteEntry.COLUMN_OVERVIEW, movie.getOverview());
        values.put(FavoriteContract.FavoriteEntry.COLUMN_RATING_BAR, movie.getVoteAverage());
        values.put(FavoriteContract.FavoriteEntry.COLUMN_RATING, movie.getVoteCount());
        values.put(FavoriteContract.FavoriteEntry.COLUMN_RELEASE_DATE, movie.getReleaseDate());
        values.put(FavoriteContract.FavoriteEntry.COLUMN_NAME, movie.getName());

        db.insert(FavoriteContract.FavoriteEntry.TABLE_NAME, null, values);
        db.close();
    }

    public void deleteFavorite (String overview) {
        SQLiteDatabase db = this.getWritableDatabase();
        db.delete(FavoriteContract.FavoriteEntry.TABLE_NAME, FavoriteContract.FavoriteEntry.COLUMN_OVERVIEW + " = ", new String[]{overview});
    }

    public ArrayList<Movie> getAllFavorite () {
        String[] columns ={
                FavoriteContract.FavoriteEntry.TABLE_NAME,
                FavoriteContract.FavoriteEntry._ID,
                FavoriteContract.FavoriteEntry.COLUMN_TITTLE,
                FavoriteContract.FavoriteEntry.COLUMN_POSTERPATH,
                FavoriteContract.FavoriteEntry.COLUMN_OVERVIEW,
                FavoriteContract.FavoriteEntry.COLUMN_RATING_BAR,
                FavoriteContract.FavoriteEntry.COLUMN_RATING,
                FavoriteContract.FavoriteEntry.COLUMN_RELEASE_DATE,
                FavoriteContract.FavoriteEntry.COLUMN_NAME
        };
        String sortOrder =
                FavoriteContract.FavoriteEntry._ID + " ASC";
        ArrayList<Movie> favoriteList = new ArrayList<>();
        SQLiteDatabase db = this.getReadableDatabase();

            Cursor cursor = db.query(FavoriteContract.FavoriteEntry.TABLE_NAME,
                    columns,
                    null,
                    null,
                    null,
                    null,
                    sortOrder);
            if (cursor.moveToFirst()) {
                do {
                    Movie movie = new Movie();
                    movie.setName(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLUMN_NAME)));
                    movie.setTitle(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLUMN_TITTLE)));
                    movie.setPosterPath(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLUMN_POSTERPATH)));
                    movie.setOverview(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLUMN_OVERVIEW)));
                    movie.setReleaseDate(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLUMN_RELEASE_DATE)));
                    movie.setVoteAverage(Double.parseDouble(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COULOUMN_RATING))));
                    movie.setVoteCount(Integer.parseInt(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLUMN_RATING_BAR))));

                    favoriteList.add(movie);
                } while (cursor.moveToNext());
            }
            cursor.close();
            db.close();
        return favoriteList;

    }
}

表格

class FavoriteContract {
    static final class FavoriteEntry implements BaseColumns {

        static final String TABLE_NAME ="favorite";
        static final String COLUMN_TITTLE = "tittle ";
        static final String COLUMN_NAME = "name ";
        static final String COLUMN_POSTERPATH = "poster_path ";
        static final String COLUMN_OVERVIEW = "overview ";
        static final String COLUMN_RATING ="rating ";
        static final String COLUMN_RATING_BAR ="rating_bar ";
        static final String COLUMN_RELEASE_DATE ="release_date ";

    }
}

在我的代码中,有3个空值,发行日期,等级栏和等级,所以请告诉我如何解决它,我应该怎么做才能克服这个问题

1 个答案:

答案 0 :(得分:0)

由于在表中插入行时,上述三个列的值都不能为null。可能您可以添加默认约束来设置默认值,而不是显式传递null。