按如下所示将数据添加到数据库时出现编译错误
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个空值,发行日期,等级栏和等级,所以请告诉我如何解决它,我应该怎么做才能克服这个问题
答案 0 :(得分:0)
由于在表中插入行时,上述三个列的值都不能为null。可能您可以添加默认约束来设置默认值,而不是显式传递null。