Я попытался вставить данные в базу данных в android.SQLiteConstraintException при обращении к базе данных
Это один работает:
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(
"create table study " +
"(percentage integer primary key,videoDuration text,totalTime text,date text)"
);
}
public boolean insertStudy(String percentage, String videoDuration, String totalTime, String date) {
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("percentage", percentage);
contentValues.put("videoDuration", videoDuration);
contentValues.put("totalTime", totalTime);
contentValues.put("date", date);
db.insert("study", null, contentValues);
return true;
}
Но когда я пытаюсь добавить еще один столбец для серийного номера (как я не имею никакого столбец первичного ключа), я получаю ошибку при вставке.
Это новый код (не работает):
public void onCreate(SQLiteDatabase db) {
// TODO Auto-generated method stub
db.execSQL(
"create table study " +
"(serial integer primary key,percentage text,videoDuration text,totalTime text,date text)"
);
}
public boolean insertStudy(String percentage, String videoDuration, String totalTime, String date) {
serialNumber++;
SQLiteDatabase db = this.getWritableDatabase();
ContentValues contentValues = new ContentValues();
contentValues.put("serial", serialNumber);
contentValues.put("percentage", percentage);
contentValues.put("videoDuration", videoDuration);
contentValues.put("totalTime", totalTime);
contentValues.put("date", date);
db.insert("study", null, contentValues);
return true;
}
Я использую SERIALNUMBER, как счетчик так, что он будет держать вставки значения в последовательный, а также выступать в качестве первичного ключа. Я делаю ошибку за этот код:
Error inserting date=27/08/2016 percentage=2.6 serial=1 totalTime=0:0:1 videoDuration=22:96
android.database.sqlite.SQLiteConstraintException: PRIMARY KEY must be unique (code 19)
Я не понимаю, почему первый работает, но не второй. Я хочу понять, почему второй код не работает.
Мое приложение может работать с первым кодом, но в будущем это может привести к ошибкам, поэтому я хочу использовать второй код.
Это обычное явление, потому что вы сохранили процент в качестве первичного ключа, и когда вы вставляете первичный ключ данных, дублируется, лучше возьмите Base._ID в качестве первичного ключа, который будет автоматически увеличиваться, и если вы хотите использовать свой собственный, то убедитесь, что th ey не дублируются. –
Быстрее и лучше Google выполняет свои исключения и ошибки, чем размещать их на StackOverflow, прежде чем что-либо делать. ** A. ** вы избежите downvotes, ** B. ** так вы улучшите свои поисковые запросы. – Sufian
Возможный дубликат [первичного ключа исключения исключения sqlite должен быть уникальным] (http://stackoverflow.com/questions/26986687/sqlite-constraint-exception-primary-key-must-be-unique) – Sufian