gpt4 book ai didi

android.database.sqlite.SQLiteConstraintException : NOT NULL constraint failed: albums. 路径(代码 1299)

转载 作者:IT王子 更新时间:2023-10-29 06:20:10 24 4
gpt4 key购买 nike

当我将新项目添加到我的数据库时,我的应用程序发生异常。

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)

我的适配器:

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;
}
}

表格:

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) {

}
}

查询

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

插入:

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);
}

有人可以帮帮我吗?

最佳答案

您的数据库定义中有以下 NOT NULL 值:

CONTENT
PATH
VIDEO
TIME

但是在您的 addDB 中,您只将 CONTENT 和 TIME 放在 ContentValues 中,因此它肯定也在寻找 PATH 和 VIDEO。如果它们不存在,它将给出错误。有两种解决方法:

解决方案一:

从 VIDEO 和 PATH 中删除 NOT NULL 约束:

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

解决方案 2:

将 VIDEO 和 PATH 添加到 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);
}

关于android.database.sqlite.SQLiteConstraintException : NOT NULL constraint failed: albums. 路径(代码 1299),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37234433/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com