Android.database.sqlite.SQLiteConstraintException: NOT NULL constraint failed: albums.path (code 1299)

An exception occurred in my application when I add a new item to my database.

Error inserting time=2016ๅนด05ๆœˆ14ๆ—ฅ 23:42:03 content=zxdc
    android.database.sqlite.SQLiteConstraintException: NOT NULL constraint failed: albums.path (code 1299)
        at android.database.sqlite.SQLiteConnection.nativeExecuteForLastInsertedRowId(Native Method)
        at android.database.sqlite.SQLiteConnection.executeForLastInsertedRowId(SQLiteConnection.java:780)
        at android.database.sqlite.SQLiteSession.executeForLastInsertedRowId(SQLiteSession.java:788)
        at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:86)
        at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1471)
        at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1341)
        at com.driver.shinekaye.olddriver.AddContent.addDB(AddContent.java:53)
        at com.driver.shinekaye.olddriver.AddContent.onClick(AddContent.java:70)
        at android.view.View.performClick(View.java:5198)
        at android.view.View$PerformClick.run(View.java:21147)
        at android.os.Handler.handleCallback(Handler.java:739)
        at android.os.Handler.dispatchMessage(Handler.java:95)
        at android.os.Looper.loop(Looper.java:148)
        at android.app.ActivityThread.main(ActivityThread.java:5417)
        at java.lang.reflect.Method.invoke(Native Method)
        at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:726)
        at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:616)

My adapter:

public class MyAdapter extends BaseAdapter {

    private Context context;
    private Cursor cursor;
    private LinearLayout layout;

    public MyAdapter(Context context, Cursor cursor) {
        this.context = context;
        this.cursor = cursor;

    }

    @Override
    public int getCount() {
        return cursor.getCount();
    }

    @Override
    public Object getItem(int position) {
        return cursor.getPosition();
    }

    @Override
    public long getItemId(int position) {
        return position;
    }

    @Override
    public View getView(int position, View convertView, ViewGroup parent) {
        LayoutInflater inflater = LayoutInflater.from(context);
        layout = (LinearLayout) inflater.inflate(R.layout.activity_secretalbum_item, null);
        TextView contentTv = (TextView) layout.findViewById(R.id.list_content);
        TextView timeTv = (TextView) layout.findViewById(R.id.list_time);
        ImageView imgIv = (ImageView) layout.findViewById(R.id.list_img);
        ImageView videoIv = (ImageView) layout.findViewById(R.id.list_video);
        cursor.moveToPosition(position);
        String content = cursor.getString(cursor.getColumnIndex("content"));
        String time = cursor.getString(cursor.getColumnIndex("time"));
        contentTv.setText(content);
        timeTv.setText(time);

        return layout;
    }
}

Table:

public class SecretAlbumDB extends SQLiteOpenHelper {

    public static final String TABLE_NAME = "albums";
    public static final String CONTENT = "content";
    public static final String PATH = "path";
    public static final String VIDEO = "video";
    public static final String ID = "_id";
    public static final String TIME = "time";

    public SecretAlbumDB(Context context) {
        super(context, "albums", null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + ID
                + " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT
                + " TEXT NOT NULL," + PATH
                + " TEXT NOT NULL," + VIDEO
                + " TEXT NOT NULL," + TIME
                + " TEXT NOT NULL)");
    }

    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

    }
}

Inquiry

 public void selectDB() {
    Cursor cursor = dbReader.query(SecretAlbumDB.TABLE_NAME, null, null, null, null, null, null);
    adapter = new MyAdapter(this, cursor);
    list.setAdapter(adapter);

Insert:

private void addDB() {
    ContentValues cv = new ContentValues();
    cv.put(SecretAlbumDB.CONTENT, editText.getText().toString());
    cv.put(SecretAlbumDB.TIME, getTime());
    dbWriter.insert(SecretAlbumDB.TABLE_NAME, null, cv);
}

Can anyone help me out?

+4
source share
2 answers

Your database definition has the following NOT NULL values:

CONTENT
PATH
VIDEO
TIME

But in your addDB you add CONTENT and TIME to ContentValues โ€‹โ€‹so that it definitely looks for PATH and VIDEO. If they are absent, this will give an error. There are two solutions:

Solution 1:

remove NOT NULL restriction from VIDEO and PATH:

        db.execSQL("CREATE TABLE " + TABLE_NAME + "(" + ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT," + CONTENT
            + " TEXT NOT NULL," + PATH
            + " TEXT," + VIDEO
            + " TEXT," + TIME
            + " TEXT NOT NULL)");

Solution 2:

add VIDEO and PATH to ContentValues:

private void addDB() {
    ContentValues cv = new ContentValues();
    cv.put(SecretAlbumDB.CONTENT, editText.getText().toString());
    cv.put(SecretAlbumDB.TIME, getTime());
    cv.put(SecretAlbumDB.VIDEO, getVideo());
    cv.put(SecretAlbumDB.Path, getPath());

    dbWriter.insert(SecretAlbumDB.TABLE_NAME, null, cv);
}
+8
source

, () NOT NULL, cv. null , cv NOT NULL.

+1

All Articles