我正在尝试从SQLite数据库表中读取所有条目。 问题在于,光标每次仅返回一个条目。 我知道该表已经有大约30个条目,因为当我尝试再次保存条目时,每个条目都会出现此错误:

android.database.sqlite.SQLiteConstraintException: UNIQUE constraint failed: list.id (code 1555)

#################################################################

Error Code : 1555 (SQLITE_CONSTRAINT_PRIMARYKEY)

Caused By : Abort due to constraint violation.

(UNIQUE constraint failed: list.id (code 1555))

#################################################################

我在这里看到了关于类似问题的几个问题,但是没有一种解决方案适合我。 到目前为止,这是我尝试过的:

public class Table

{

private static final String TABLE_NAME = "list";

// Column names

private static final String ID = "id";

private static final String INDEX = "index";

private static final String TITLE = "title";

private static final String CREATE_STATEMENT = "CREATE TABLE IF NOT EXISTS " + TABLE_NAME +

"(" + ID + " INTEGER PRIMARY KEY, " + TITLE + " TEXT, " +

INDEX + " INTEGER)";

public static void create(SQLiteDatabase db)

{

db.execSQL(CREATE_STATEMENT);

}

public static void drop(SQLiteDatabase db)

{

db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

}

public static void saveList(SQLiteDatabase db, ArrayList list)

{

for (MyObject obj : list)

{

long id = insert(db, obj);

}

}

private static long insert(SQLiteDatabase db, MyObject obj)

{

final ContentValues values = new ContentValues();

values.put(ID, obj.getId());

values.put(INDEX, obj.getIndex());

values.put(TITLE, obj.getTitle());

return db.insert(TABLE_NAME, null, values);

}

public static ArrayList loadList(SQLiteDatabase db)

{

final ArrayList list = new ArrayList<>();

Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_NAME, null);

Log.d(TABLE_NAME, "Cursor size: " + cursor.getCount());

if (cursor.moveToFirst())

{

do

{

final long id = cursor.getLong(cursor.getColumnIndexOrThrow(ID));

final String title = cursor.getString(cursor.getColumnIndexOrThrow(TITLE));

final int index = cursor.getInt(cursor.getColumnIndexOrThrow(INDEX));

list.add(new MyObject(id, index, title);

}

while (cursor.moveToNext());

}

cursor.close();

return list;

}

}

我也尝试过使用cursor = db.query(TABLE_NAME, null, null, ..., null)但是得到了相同的结果。

这就是我从SQLiteOpenHelper类调用上述函数的方式:

public void saveList(ArrayList list)

{

final SQLiteDatabase db = getWritableDatabase();

Table.drop(db);

Table.create(db);

Table.saveList(db, list);

}

public ArrayList loadList()

{

return Table.loadList(getReadableDatabase());

}

我在同一数据库中有另一个表,该表具有非常相似的代码,但工作正常。 我已经尝试修复了一段时间,但是我看不到发生了什么。 任何帮助将非常感激

Logo

汇聚全球AI编程工具,助力开发者即刻编程。

更多推荐