初学者再次想要建议。尝试按照教程向数据库添加/编辑/删除数据。
但是在尝试添加新标题时出现以下错误:
ERROR/Database(278): Error inserting Book_Title=testtitle Book_Author=testauthor
ERROR/Database(278): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
我怀疑它是ID的一个约束,因为数据库已经在以前的类文件中创建了。但是我不熟悉Java知道如何修复它。编辑和删除数据工作正常。
一些代码:
DatabaseManager.class:
public void addRow(String rowStringOne, String rowStringTwo)
{
// this is a key value pair holder used by android's SQLite functions
ContentValues values = new ContentValues();
values.put(TABLE_ROW_ONE, rowStringOne);
values.put(TABLE_ROW_TWO, rowStringTwo);
// ask the database object to insert the new data
try{db.insert(TABLE_NAME, null, values);}
catch(Exception e)
{
Log.e("DB ERROR", e.toString());
e.printStackTrace();
}
}
private class CustomSQLiteOpenHelper extends SQLiteOpenHelper
{
public CustomSQLiteOpenHelper(Context context)
{
super(context, DB_NAME, null, DB_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db)
{
// This string is used to create the database. It should
// be changed to suit your needs.
String newTableQueryString = "create table " +
TABLE_NAME +
" (" +
TABLE_ROW_ID + " integer primary key autoincrement not null," +
TABLE_ROW_ONE + " text," +
TABLE_ROW_TWO + " text" +
");";
// execute the query string to the database.
db.execSQL(newTableQueryString);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
{
// NOTHING TO DO HERE. THIS IS THE ORIGINAL DATABASE VERSION.
// OTHERWISE, YOU WOULD SPECIFIY HOW TO UPGRADE THE DATABASE.
}
}
}
AddData.class:
private void addRow()
{
try
{
// ask the database manager to add a row given the two strings
db.addRow
(
textFieldOne.getText().toString(),
textFieldTwo.getText().toString()
);
// request the table be updated
updateTable();
// remove all user input from the Activity
emptyFormFields();
}
catch (Exception e)
{
Log.e("Add Error", e.toString());
e.printStackTrace();
}
}
答案 0 :(得分:0)
您被告知要插入由于主键或外键/键限制而无法插入的记录。您很可能想要使用已经在表格中的ID
插入记录
SQLIte AFAIK中没有autoincrement
个关键字,但任何表中都有_ID
属性,我建议您将其用作主键自动增量而不是创建自己的属性。
发生异常导致您没有插入自定义主键,并且不会像您想象的那样自动增量。
答案 1 :(得分:0)
尝试删除并重新创建数据库。
我的代码中没有看到任何错误,我怀疑表定义发生了变化,导致数据库和代码不同步
(我的sqlite代码不以分号结尾;你也可以试试这个)
答案 2 :(得分:0)
如果您找到或未找到解决问题的解决方案,我建议您为您的表实施内容提供程序。如果您对ContentProviders一无所知,我在这里发布了一个相关的入门链接。
http://www.grokkingandroid.com/android-tutorial-writing-your-own-content-provider/
希望您能在这里找到解决方案。祝你好运