2014-01-08 76 views
2

我知道你在这里有很多关于这个错误的问题,但我不明白为什么所有的字段似乎在Logcat上正确填充,但即使如此发生故障。Android-SQLiteConstraintException错误代码19:约束失败

下面是表的创建:

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

    } 

这里是logcat的:

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) 

正如你可以看到所有的字段填写。任何人都可以帮忙,并告诉什么我真的做错了

+1

您是否输入了任何重复的值? – Raghunandan

+0

卸载并重新安装,以便任何可能的旧数据库被删除,并且你的'onCreate()'被再次调用。认为有一个带有不同约束的旧版本模式的数据库文件。 – laalto

+0

是的,我试图添加3个不同的项目。他们拥有相同的国家和国家,但对于私人医生,姓名和图片来说却有不同的价值。 但是我从第一个项目得到了这个错误。桌上还没有政客。 –

回答

0

尝试删除AUTOINCREMENT UNIQUE inyour创建表脚本

+0

我试过了。不要工作。 –

0

这是你的错误id INTEGER PRIMARY KEY AUTOINCREMENT UNIQUE

当你定义的任何列作为主键,那么你就不需要指定它为UNIQUE。主键默认为UNIQUE。

+0

我已经试过 id INTEGER PRIMARY KEY AUTOINCREMENT和id INTEGER PRIMARY KEY。这些工作都没有。我仍然得到同样的错误。 我从教程代码中获得此定义,并且它在ADT中工作,但在Android Studio –

+0

中无法提供该教程链接给我们? – Kitkat

+0

它来自私人课程。事实上,他们说只是把INTEGER PRIMARY KEY放进去,但是当我这样做时,我从重复ID中得到一个错误。所以我把AUTOINCREMENT UNIQUE和工作。但我试过你说的话,但我仍然有同样的错误。 –

相关问题