2016-05-11 9 views
0

私はアンドロイドプログラミングを初めて利用していて、実際のsqliteデータベースを構築することができました。データが正しく入力されないと、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(); 
       } 
      } 
    ); 
} 
+0

、入力された日付が有効であるかどう – Sush

+1

だけをチェックウルログを共有してください。挿入されていない場合は、挿入を拒否します(ユーザーに警告する)。 –

答えて

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

データベースチェックで値を入れる前に一つのことを行いますが、それが有効な日付かではありません、あなたはその有効な場合は、データを挿入するか、またはその有効な日付をチェックしたりしませ

するために、次のコードvalue.useいくつかのダミーを挿入することができます
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

関連する問題