Android SQLiteConstraintException错误代码19:约束失败
我知道您对这个错误有很多疑问,但我无法理解为什么Logcat上的所有字段都填写正确,但即使如此,还是出现了故障 以下是表格的创建过程:Android SQLiteConstraintException错误代码19:约束失败,android,sqlite,error-code,Android,Sqlite,Error Code,我知道您对这个错误有很多疑问,但我无法理解为什么Logcat上的所有字段都填写正确,但即使如此,还是出现了故障 以下是表格的创建过程: public void onCreate(SQLiteDatabase db) { String ddl = "CREATE TABLE Politician (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE , idpolitician INTEGER NOT NULL, name TEXT NOT NU
public void onCreate(SQLiteDatabase db) {
String ddl = "CREATE TABLE Politician (id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE , idpolitician INTEGER NOT NULL, name TEXT NOT NULL, picture TEXT , position TEXT NOT NULL, country TEXT NOT NULL, state TEXT NOT NULL, city TEXT NOT NULL);";
db.execSQL(ddl);
}
这就是我试图拯救的地方
public void savePolitician(Politician politician) {
ContentValues values = new ContentValues();
values.put("idpolitician", politician.getId());
values.put("name", politician.getName());
values.put("picture", politician.getPictureFilename());
values.put("position", politician.getPosition());
values.put("country", politician.getCountry());
values.put("state", politician.getState());
values.put("city", politician.getCity());
mDatabase.insert("Politician", null, values);
}
下面是日志:
01-08 04:03:31.149 32633-32633/? E/Database﹕ [SQLiteDatabase.java:1428:insert()] Error inserting
state=SP position=governador picture=example idpolitician=1 city=Sao Paulo country=Brasil name=Alckmin
android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1582)
at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
at com.politify.dao.DbManegament.savePolitician(DbManegament.java:44)
如您所见,所有字段都已填充。任何人都可以帮助并告诉我做错了什么请尝试在您的创建表脚本中删除
自动增量唯一
这是您的错误id INTEGER主键自动增量唯一
将任何列定义为主键时,不需要将其指定为唯一。默认情况下,主键是唯一的。是否输入了任何重复的值?请卸载并重新安装,以便删除所有可能的旧数据库,并再次调用您的
onCreate()
。认为有一个数据库文件具有不同约束的模式的旧版本。是的,我尝试添加3个不同的项。他们有相同的州和国家,但不同的政治人物、名字和图片的价值观。但这是我从第一项中得到的错误。桌子上还没有政治家。@MárcioPaiva看起来你的主键已经存在了。删除旧的数据库,并有一个新的。我是一个乞丐非常抱歉,如果它似乎愚蠢。当我在智能手机上运行它时,它会自动删除旧版本并创建一个新版本?我已经尝试过id INTEGER主键自动递增和id INTEGER主键。这些都不行。我仍然会犯同样的错误。我从一个教程代码中得到了这个定义,它在ADT中工作,但在Android Studio中不工作。你能给我们提供这个教程的链接吗?它来自一个私人课程。事实上,他们说只放id INTEGER主键,但当我这样做时,我从重复的id中得到了一个错误。所以我把AUTOINCREMENT设置为UNIQUE并使用它。但是我试过你说的,我还是犯了同样的错误。好的,没问题。我仔细检查了您的查询,它是find,我认为在插入记录时一个或多个字段的值为空。@MárcioPaiva uninstall and reinstall app。问题可能是您的主键已经存在,因此出现异常