当数据输入错误时,SQLite可以避免崩溃

时间:2016-05-11 10:32:52

标签: android sqlite

我是Android编程的新手,刚刚设法构建了一个有效的sqlite数据库。

但是当数据输入不正确时,例如进入“有效期限”部分,要求用户以YYYY / MM / DD格式输入,如果输入错误,程序将崩溃。有没有办法拒绝添加到数据库中的信息,避免崩溃?

以下是设置数据库并输入相应列的代码

 @Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("create table " + TABLE_NAME + " (" + COL_1 + " INTEGER PRIMARY KEY," + COL_2 + " TEXT," + COL_3 + " DATE," + COL_4 + " DATE" + ")");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);

    onCreate(db);
}

public boolean insertData(String Name, String Datereceived, String Expirydate) {
    SQLiteDatabase db = this.getWritableDatabase();
    ContentValues contentValues = new ContentValues();
    contentValues.put(COL_2, Name);
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
    contentValues.put(COL_3, dateFormat.format(new Date(Datereceived)));
    contentValues.put(COL_3, Datereceived);
    contentValues.put(COL_4, dateFormat.format(new Date(Expirydate)));
    long result = db.insert(TABLE_NAME, null, contentValues);
    if (result == -1)
        return false;
    else
        return true;

}

这是更新数据库的代码

 public void UpdateData() {
    btnviewUpdate.setOnClickListener(
            new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    boolean isUpdate = myDb.updateData(editTextId.getText().toString(), editname.getText().toString(),
                            editdate.getText().toString(), editexpiry.getText().toString());
                    if (isUpdate == true)
                        Toast.makeText(DatabaseUpdater.this, "Data updated", Toast.LENGTH_LONG).show();

                    else
                        Toast.makeText(DatabaseUpdater.this, "Data not updated", Toast.LENGTH_LONG).show();
                }
            }
    );
}

2 个答案:

答案 0 :(得分:1)

你可以这样做:

public boolean insertData(String Name, String Datereceived, String Expirydate) {
   try {
       SQLiteDatabase db = this.getWritableDatabase();
       ContentValues contentValues = new ContentValues();
       contentValues.put(COL_2, Name);
       SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd");
       contentValues.put(COL_3, dateFormat.format(new Date(Datereceived)));
       contentValues.put(COL_3, Datereceived);
       contentValues.put(COL_4, dateFormat.format(new Date(Expirydate)));
       long result = db.insert(TABLE_NAME, null, contentValues);
       if (result == -1)
           return false;
       else
           return true;
   } catch(Exception x) {
      return false;
   }

不是很好,但你可以从那开始。

答案 1 :(得分:1)

在将值放入数据库检查之前做一件事是否是有效日期,如果数据有效或插入一些虚拟值,可以插入数据。使用以下代码检查其有效日期

   public static boolean isValidFormat(String format, String value) {
    Date date = null;
    try {
        SimpleDateFormat sdf = new SimpleDateFormat(format);
        date = sdf.parse(value);
        if (!value.equals(sdf.format(date))) {
            date = null;
        }
    } catch (ParseException ex) {
        ex.printStackTrace();
    }
    return date != null;
}

更多日期有效性检查尝试此链接 - Java: Check the date format of current string is according to required format or not