Не выполнено ограничение NULL. Favorites.rating (код 1299 SQLITE_CONSTRAINT_NOTNULL) - PullRequest
0 голосов
/ 25 сентября 2019

Произошла ошибка компиляции при добавлении данных в базу данных следующим образом

2019-09-25 08:29:29.332 6458-6458/com.mulazi.mymoviecatalogue E/SQLiteDatabase: Error inserting tittle =The Old Man & the Gun release_date =null overview =The true story of Forrest Tucker, from his audacious escape from San Quentin at the age of 70 to an unprecedented string of heists that confounded authorities and enchanted the public. Wrapped up in the pursuit are a detective, who becomes captivated with Forrest’s commitment to his craft, and a woman, who loves him in spite of his chosen profession. name =null poster_path =https://image.tmdb.org/t/p/w500null rating_bar =null rating =null
    android.database.sqlite.SQLiteConstraintException: NOT NULL constraint failed: favorite.rating (code 1299 SQLITE_CONSTRAINT_NOTNULL)
        at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
        at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:879)
        at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:790)
        at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:88)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1599)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1468)
        at com.mulazi.mymoviecatalogue.db.FavoriteDbHelper.addFavorite(FavoriteDbHelper.java:64)
        at com.mulazi.mymoviecatalogue.DetailActivity.saveFavorite(DetailActivity.java:141)
        at com.mulazi.mymoviecatalogue.DetailActivity$1.onClick(DetailActivity.java:52)
        at android.view.View.performClick(View.java:7251)
        at android.view.View.performClickInternal(View.java:7228)
        at android.view.View.access$3500(View.java:802)
        at android.view.View$PerformClick.run(View.java:27843)
        at 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.COLOUMN_TITTLE + " TEXT, " +
                FavoriteContract.FavoriteEntry.COLOUMN_POSTERPATH + " TEXT NOT NULL," +
                FavoriteContract.FavoriteEntry.COLOUMN_OVERVIEW + " TEXT, " +
                FavoriteContract.FavoriteEntry.COLOUMN_RATING_BAR + " INTEGER NOT NULL, " +
                FavoriteContract.FavoriteEntry.COULOUMN_RATING +" TEXT NOT NULL ," +
                FavoriteContract.FavoriteEntry.COLOUMN_RELEASE_DATE + " TEXT NOT NULL, " +
                FavoriteContract.FavoriteEntry.COLOUMN_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.COLOUMN_TITTLE, movie.getTitle());
        values.put(FavoriteContract.FavoriteEntry.COLOUMN_POSTERPATH, movie.getPosterPath());
        values.put(FavoriteContract.FavoriteEntry.COLOUMN_OVERVIEW, movie.getOverview());
        values.put(FavoriteContract.FavoriteEntry.COLOUMN_RATING_BAR, movie.getVoteAverage());
        values.put(FavoriteContract.FavoriteEntry.COULOUMN_RATING, movie.getVoteCount());
        values.put(FavoriteContract.FavoriteEntry.COLOUMN_RELEASE_DATE, movie.getReleaseDate());
        values.put(FavoriteContract.FavoriteEntry.COLOUMN_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.COLOUMN_OVERVIEW + " = ", new String[]{overview});
    }

    public ArrayList<Movie> getAllFavorite () {
        String[] columns ={
                FavoriteContract.FavoriteEntry.TABLE_NAME,
                FavoriteContract.FavoriteEntry._ID,
                FavoriteContract.FavoriteEntry.COLOUMN_TITTLE,
                FavoriteContract.FavoriteEntry.COLOUMN_POSTERPATH,
                FavoriteContract.FavoriteEntry.COLOUMN_OVERVIEW,
                FavoriteContract.FavoriteEntry.COLOUMN_RATING_BAR,
                FavoriteContract.FavoriteEntry.COULOUMN_RATING,
                FavoriteContract.FavoriteEntry.COLOUMN_RELEASE_DATE,
                FavoriteContract.FavoriteEntry.COLOUMN_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.COLOUMN_NAME)));
                    movie.setTitle(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLOUMN_TITTLE)));
                    movie.setPosterPath(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLOUMN_POSTERPATH)));
                    movie.setOverview(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLOUMN_OVERVIEW)));
                    movie.setReleaseDate(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLOUMN_RELEASE_DATE)));
                    movie.setVoteAverage(Double.parseDouble(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COULOUMN_RATING))));
                    movie.setVoteCount(Integer.parseInt(cursor.getString(cursor.getColumnIndex(FavoriteContract.FavoriteEntry.COLOUMN_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  COLOUMN_TITTLE = "tittle ";
        static final String  COLOUMN_NAME = "name ";
        static final String  COLOUMN_POSTERPATH = "poster_path ";
        static final String COLOUMN_OVERVIEW = "overview ";
        static final String COULOUMN_RATING ="rating ";
        static final String COLOUMN_RATING_BAR ="rating_bar ";
        static final String COLOUMN_RELEASE_DATE ="release_date ";

    }
}

вмой код, есть 3 пустых значения, дата выпуска, рейтинг-бар и рейтинг, поэтому, пожалуйста, скажите мне, как это исправить, что я должен сделать, чтобы преодолеть это

1 Ответ

0 голосов
/ 25 сентября 2019

Поскольку все три упомянутых столбца значения не могут быть нулевыми при вставке строки в таблицу.Возможно, вы можете добавить ограничение по умолчанию, чтобы установить значения по умолчанию вместо явной передачи нуля.

...