java - NOT NULL 约束失败 favorite. rating(代码 1299 SQLITE_CONSTRAINT_NOTNULL)

标签 java android android-sqlite

向数据库添加数据时出现编译错误,如下

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.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 个空值、发布日期、评级栏和评级,所以请告诉我如何修复它,我应该做什么来克服这个问题

最佳答案

在表中插入行时,所有提到的三个列值都不能为空。也许您可以添加默认约束来设置默认值,而不是显式传递 null。

关于java - NOT NULL 约束失败 favorite. rating(代码 1299 SQLITE_CONSTRAINT_NOTNULL),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58090115/

相关文章:

java - 使用 <h :head> instead of <head> 时不会应用自定义 CSS

java - 在centos 7中启动tomcat 7的问题

android - 更新特定行的特定列的值。安卓SQLite

java - 从数据库检索数据?

android - 如何在不传递上下文引用的情况下从类中的静态方法访问 Android SharedPreferences?

java - SQLite查询: get all columns of a row(android)?

java - 共享一个java项目(不同的IDE)

java - JScience 货币单位换算是否颠倒?

android - Vuforia 视频播放问题 - 视频倒转播放

java - Jsoup - CSS 查询选择器问题(?)