2012-05-12 2 views
0

Я пытаюсь вставить данные в базу данных sqlit, но у меня есть андроид SQLiteConstraintException: код ошибки 19: исключение с ошибкой ограничения. Я видел, что в этой теме много вопросов, я прочитал и попробовал их, но исключение все же, мне интересно, вызвало ли это исключение значение auto increment food_id, поскольку оператор insert возвращает -1 и i интересно, почему это исключение происходит с момента правильного ввода первого идентификатора вставки, но все последующие вставки не удались, почему эта ошибка возникает и как я могу ее решить? пожалуйста, помогите мне ..данные не могут быть вставлены в таблицы базы данных sqlit

создавание заявления в классе DBAdapter

private static final String Meal_TABLE_CREATE= "create table IF NOT EXISTS Meal (Date text not null , "+ 
     "Time text not null,MealType text not null,"+ " primary key(Date,Time ,MealType));" ; 

private static final String FOOD_TABLE_CREATE= "create table IF NOT EXISTS Food (_id INTEGER primary key AUTOINCREMENT , "+ 
     "Food_Name text not null,Calories integer not null,"+ "VB12 integer not null,Cholesterol integer not null,"+ 
     "Protein integer not null,Iron integer not null,Sodium integer not null,Fat_Mono integer not null,Fat_Sat integer not null,carbohydrate integer not null);" ; 

private static final String MealFOOD_TABLE_CREATE= "create table IF NOT EXISTS MealFood (Date text not null , "+ 
     "Time text not null,MealType text not null,"+"Food_ID integer not null , primary key(Date,Time ,MealType,Food_ID));" ; 

вставляя методы

// insert meal to the meal table 
public long SaveMeal(String date , String time , String mealType) 
{ 
    ContentValues content = new ContentValues(); 
    content.put(KEY_MDATE,date); 
    content.put(KEY_MTIME,time); 
    content.put(KEY_MEALTYPE,mealType); 
    return db.insert(MEAL_TABLE_NAME, null, content); 

} 

// insert Food to the Food table 
public long SaveFood(String name,int calories,int Vit_B12,int cholesterol,int protein ,int iron ,int sodium,int Fat_Mono,int Fat_Sat,int carbohydrate) 
{ 
    ContentValues content = new ContentValues(); 

    content.put(KEY_FOODNAME,name); 
    content.put(KEY_CALORIES,calories); 
    content.put(KEY_VB12,Vit_B12); 
    content.put(KEY_CHOLESTEROL,cholesterol); 
    content.put(KEY_PROTEIN,protein); 
    content.put(KEY_IRON,iron); 
    content.put(KEY_SODIUM,sodium); 
    content.put(KEY_FAT_MONO,Fat_Mono); 
    content.put(KEY_FAT_Sat,Fat_Sat); 
    content.put(KEY_CARBOHYDRATE,carbohydrate); 


    return db.insert(FOOD_TABLE_NAME, null, content); 

} 

// get food id by its name 

public int getFoodIDByName(String name) throws SQLException 
{ int id; 
Cursor cursor = null; 

try{ 

    cursor=db.query(true,FOOD_TABLE_NAME, new String[]{KEY_FOODID}, KEY_FOODNAME+ " = '" + name + "'", null, null, null, null,null); 
    if (cursor != null) { 
     cursor.moveToFirst(); 
    } 

    id=0; 
    while (cursor.moveToNext()) 
     id=cursor.getInt(cursor.getColumnIndex(KEY_FOODID)); 

} 
finally{ 
    cursor.close(); 
    cursor.deactivate(); 
} 
return id; 

} 


// insert mealFood to mealFood table 
public long SaveMealFood(String date , String time , String mealType, int Food_id) 
{ 
    ContentValues content = new ContentValues(); 
    content.put(KEY_MFDATE,date); 
    content.put(KEY_MFTIME,time); 
    content.put(KEY_MFMEALTYPE,mealType); 
    content.put(KEY_MFFOODID,Food_id); 
    return db.insert(MEALFOOD_TABLE_NAME, null, content); 

} 

ява код

DBAdapter dbAdapter=new DBAdapter(SaveMeal.this); 
     dbAdapter.open(); 
     Food n; 
    String m; 
    int FoodIDByName; 
    for(int i = 0; i <MealActivity.array.size(); i++){ 
     m=MealActivity.array.get(i).toString(); 
     Log.e("tag", m);//selected food name 
     for (int j = 0; j < MealActivity.tempList.size(); j++){ 
       n=MealActivity.tempList.get(j); 

       if(n.getFOOD_NAME().equals(m)){ 
     //save food 
long food_id = dbAdapter.SaveFood(n.getFOOD_NAME(),n.getCALORIES(),n.getFOOD_VITAMIN_B12(),n.getCHOLESTEROL(),n.getFOOD_PROTEIN(),n.getFOOD_IRON(),n.getFOOD_SODIUM(), 
n.getFOOD_MONO_UNSATURATED_FAT(),n.getFOOD_SATURATED_FAT(),n.getFOOD_TOTAL_CARBOHYDRATE()); 
    Log.e("tag", food_id+" food inserting done"); 

    //save meal 
long meal_id= dbAdapter.SaveMeal(meal_date,meal_time,Meal.MEAL_TYPE); 
Log.e("tag",meal_id+" meal inserting done"); 

//save meal_food 
FoodIDByName=dbAdapter.getFoodIDByName(n.FOOD_NAME); 
Log.e("tag",FoodIDByName+" food_id"); 
    long  meal_food_id=dbAdapter.SaveMealFood(meal_date,meal_time,Meal.MEAL_TYPE,FoodIDByName); 
Log.e("tag",meal_food_id+" meal_food inserting done"); 
dbAdapter.close(); 

этот результат этой строки Log.e («tag», food_id + «добавление пищи»); в моем срубе -1

MyLog

Database(657):at android.database.sqlite.SQLiteStatement.native_execute(Native  Method) 
    Database(657):at android.database.sqlite.SQLiteStatement.execute     (SQLiteStatement.java:55) 
    Database(657):at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1410)   
    -1 food inserting done 
    18 meal inserting done 
    0 food_id 
    13 meal_food inserting done 

ответ

0

Попробуйте удалить все (не NULL) ограничения и сохранить пустую пищу. Если он сохранен правильно, попробуйте добавить ограничение (NOT NULL) один за другим.

Я думаю, что одно из значений передается как NULL.

+0

Да, первичный ключ в таблице продуктов питания, в первый раз, когда я попытался вставить данные в таблицу продуктов, которую он создал, и имеет значение auto, но в следующий раз его значение всегда равно нулю и не вставлено успешно, почему это так? это то, как я использовал для вставки первичного ключа auto increment not correct? – user

+0

Попробуйте изменить идентификатор первичного ключа от _id на что-то еще, может быть, он используется самим андроидом .... возможно –

0

Это error.means вы are.violating ограничения (очевидно). Скорее всего, оставить столбец «не null» null.

Возможно, вы также нарушили свой первичный ключ, пытаясь сохранить одну и ту же комбинацию более одного раза.

+0

но я вставил все значения в таблицы, а таблица продуктов i ввела все значения, кроме food_id (_id), так как ее автоинкремент – user

+0

, пожалуйста, помогите мне .... – user

+0

Обновлен мой ответ с другим возможным нарушением ограничения. – Barak

Смежные вопросы