Android数据库存储在数据库问题中的同名

时间:2015-06-12 08:37:30

标签: android database insert

我是android新手,我需要帮助:我有一个工作正常的数据库。问题是我必须在此数据库中保存相同的值。我想检查此数据库中是否已存在该名称。如果是这样,它应该显示错误:

  

"名称已存在"。

感谢。

//dbhelper class

public class FoodDbHelper extends SQLiteOpenHelper {
private static final String DATABASE_NAME = "pkfood_calories.DB";
private static final int DATABASE_VERSION = 1;
private static final String CREATE_QUERY =
        "CREATE TABLE "+ Food.NewDishInfo.TABLE_NAME+"("
                + Food.NewDishInfo.DISH_NAME+" TEXT NOT NULL,"
                + Food.NewDishInfo.DISH_QUANTITY+" TEXT NOT NULL,"
                + Food.NewDishInfo.DISH_CALORIE+" INTEGER,"
                + Food.NewDishInfo.DISH_FAT+" TEXT NOT NULL,"
                + Food.NewDishInfo.DISH_PROTEIN+" TEXT NOT NULL,"
                + Food.NewDishInfo.DISH_SUGAR+" TEXT NOT NULL,"
                + Food.NewDishInfo.DISH_VITAMINS+" TEXT NOT NULL);";
public FoodDbHelper(Context context)
{
    super(context,DATABASE_NAME,null,DATABASE_VERSION);
    Log.e("DATABASE OPERATION","Database created / opened...");
}
@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL(CREATE_QUERY);
    Log.e("DATABASE OPERATION","Table created...");


}
public void addInformations(String name ,String quantity, Integer calorie, String fat ,
                            String protein,String sugar,String vitamins, SQLiteDatabase db){


    ContentValues contentValues = new ContentValues();
    contentValues.put(Food.NewDishInfo.DISH_NAME,name);
    contentValues.put(Food.NewDishInfo.DISH_QUANTITY,quantity);
    contentValues.put(Food.NewDishInfo.DISH_CALORIE,calorie);
    contentValues.put(Food.NewDishInfo.DISH_FAT,fat);
    contentValues.put(Food.NewDishInfo.DISH_PROTEIN,protein);
    contentValues.put(Food.NewDishInfo.DISH_SUGAR,sugar);
    contentValues.put(Food.NewDishInfo.DISH_VITAMINS,vitamins);
    db.insert(Food.NewDishInfo.TABLE_NAME, null, contentValues);
    Log.e("DATABASE OPERATION","one row inserted...");
}



//activity code

name = (EditText) findViewById(R.id.dish_name);
    quantity = (EditText) findViewById(R.id.dish_quantity);

    calorie = (EditText) findViewById(R.id.dish_calorie);
    fat = (EditText) findViewById(R.id.dish_fat);
    protein = (EditText) findViewById(R.id.dish_protein);
    sugar = (EditText) findViewById(R.id.dish_sugar);
    vitamins = (EditText) findViewById(R.id.dish_vitamins);
}

public void addDish(View view) {

    String dish_name = name.getText().toString();
    String dish_quantity = quantity.getText().toString();
   // dish_calorie = Integer.parseInt(calorie.getText().toString());
    String dish_fat = fat.getText().toString();
    String dish_protein = protein.getText().toString();
    String dish_sugar = sugar.getText().toString();
    String dish_vitamins = vitamins.getText().toString();

    if (name.getText().toString().matches("")) {
        name.setError("please enter dish name.");
        return;
    }
    if(quantity.getText().toString().matches("")) {
        quantity.setError("please enter dish quantity.");
        return;
    }
        if (calorie.getText().toString().matches("")) {
            calorie.setError("please enter dish calories.");
        return;
    }
    if (fat.getText().toString().matches("")) {
        fat.setError("please enter dish fats.");
        return;
    }
    if (protein.getText().toString().matches("")) {
        protein.setError("please enter dish proteins.");
        return;
    }
    if (sugar.getText().toString().matches("")) {
        sugar.setError("please enter dish sugar.");
        return;
    }
    if (vitamins.getText().toString().matches("")) {
        vitamins.setError("please enter dish vitamins.");
        return;
    }

            else {

        foodDbHelper = new FoodDbHelper(context);
        sqLiteDatabase = foodDbHelper.getWritableDatabase();
        foodDbHelper.addInformations(dish_name, dish_quantity, Integer.parseInt(calorie.getText().toString()), dish_fat,
                dish_protein, dish_sugar, dish_vitamins, sqLiteDatabase);
        Toast.makeText(getBaseContext(), "Data Saved", Toast.LENGTH_SHORT).show();
        foodDbHelper.close();
        Intent intent = new Intent(this, AddNewDish.class);
        startActivity(intent);


    }

}

2 个答案:

答案 0 :(得分:0)

让你的名字独一无二:

private static final String CREATE_QUERY =
    "CREATE TABLE "+ Food.NewDishInfo.TABLE_NAME+"("
            + Food.NewDishInfo.DISH_NAME+" UNIQUE TEXT NOT NULL," //here
            + Food.NewDishInfo.DISH_QUANTITY+" TEXT NOT NULL,"
            + Food.NewDishInfo.DISH_CALORIE+" INTEGER,"
            + Food.NewDishInfo.DISH_FAT+" TEXT NOT NULL,"
            + Food.NewDishInfo.DISH_PROTEIN+" TEXT NOT NULL,"
            + Food.NewDishInfo.DISH_SUGAR+" TEXT NOT NULL,"
            + Food.NewDishInfo.DISH_VITAMINS+" TEXT NOT NULL);";

当你尝试添加已有的名字时,你会得到例外。

此外,在更改数据库后,您需要清除应用程序中的数据,让app再次创建数据库。

答案 1 :(得分:0)

您有两个选择

  1. 将名称作为主键。当此列成为主键时,无法在此处插入重复值。 您可以将insert插入try catch语句中。并在异常中检查是否是"数据完整性异常"或不。如果是,则显示您的消息。
  2. 在where子句中编写一个具有名称的select方法,返回该名称的行数。如果为0,请插入记录,否则显示您的消息。
  3. 希望这会对你有所帮助。