首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >NULL约束失败favorite.rating (代码1299 SQLITE_CONSTRAINT_NOTNULL)

NULL约束失败favorite.rating (代码1299 SQLITE_CONSTRAINT_NOTNULL)
EN

Stack Overflow用户
提问于 2019-09-25 01:48:02
回答 1查看 6.2K关注 0票数 2

向数据库添加数据时存在编译错误,如下所示

2019-09-25 08:29:29.332 6458-6458/com.mulazi.myvision ecat导E/SQLiteDatabase:错误插入标题=老人和枪的release_date =null概览= Forrest Tucker的真实故事,从他在70岁时从San Quentin大胆逃跑到前所未有的一系列抢劫,混淆了当局并使公众着迷。在追捕中,有一个侦探,他被福雷斯对他的手艺的承诺迷住了,还有一个女人,尽管他所选择的职业,她仍然爱着他。名称=空poster_path =https://image.tmdb.org/t/p/w500null rating_bar =空评级=空

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

在android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native方法中)

在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.FavoriteDbHelpercom.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)android.os.Handler.handleCallback(Handler.java:883) .view.View$PerformClick.run(View.java:27843)

我的FavDbHelper

代码语言:javascript
复制
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;

    }
}

桌子

代码语言:javascript
复制
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个空值,发布日期,评级条和评级,所以请告诉我如何修复它,我应该做什么来克服这个问题。

EN

回答 1

Stack Overflow用户

发布于 2019-09-25 01:58:25

如前所述,在表中插入行时,列值不能为空。您可能可以添加默认约束来设置默认值,而不是显式地传递null。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/58090115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档