2015-07-26 3 views
0

Я хочу создать функцию удаления в своем приложении, чтобы удалить строки, добавленные больше, чем день назад, и столбец с именем «C». У меня проблема, как сравнивать текущую системную дату с датой, хранящейся в базе данных столбца,Как удалить строки из sqlite, сравнивая дату

public int RemoveSyncData(){ 

    DBHelper = new DatabaseHelper(context); 
    DateFormat dateFormat = new SimpleDateFormat("MM-dd-yyyy hh:mm:ss a"); 
    Calendar calObj = Calendar.getInstance(); 
    String currentDate = dateFormat.format(calObj.getTime()); 
    Log.e("current date",currentDate); 

    int totalRows = db.delete(DATABASE_TABLE_ATTENDANCE,SYN_STATUS + "= ? and " + CREATED_DATE + " < " + currentDate, new String[] {"C,"}); 

    db.close(); 
    return totalRows; 
} 

Я использую тот же формат дату для сравнения, bleow моего Logcat

07-24 10:50:37.018: E/AndroidRuntime(21580): Caused by: android.database.sqlite.SQLiteException: near "10": syntax error (code 1): , while compiling: DELETE FROM dailyattendance WHERE sync_status= ? and created_date < 07-24-2015 10:50:36 AM 
07-24 10:50:37.018: E/AndroidRuntime(21580): at android.database.sqlite.SQLiteConnection.nativePrepareStatement(Native Method) 
07-24 10:50:37.018: E/AndroidRuntime(21580): at android.database.sqlite.SQLiteConnection.acquirePreparedStatement(SQLiteConnection.java:882) 
07-24 10:50:37.018: E/AndroidRuntime(21580): at android.database.sqlite.SQLiteConnection.prepare(SQLiteConnection.java:493) 
07-24 10:50:37.018: E/AndroidRuntime(21580): at android.database.sqlite.SQLiteSession.prepare(SQLiteSession.java:588) 
+0

Оставить одиночную цитату вокруг 'CREATED_DATE' - как' и '"+ CREATED_DATE +"' <' –

+0

Синтаксическая ошибка SQL показана в вашем исключении. Одиночные кавычки необходимы для исправления ошибки синтаксиса SQL. –

+0

может показать мне полную строку. – Andrain

ответ

1

Коррекция в коде, как показано ниже, должны помочь. Мы должны использовать одиночные кавычки, чтобы вложить значения

int totalRows = db.delete(DATABASE_TABLE_ATTENDANCE, SYN_STATUS + "= ? and " + CREATED_DATE + " < '" + currentDate + "'", new String[] {"C"}); 

Кроме того, вы можете использовать дата_время функцию SQLite для преобразования строки времени даты для целей сопоставления. Вот один из способов переписать код. Обратите внимание на изменения в формате SimpleDateFormat и измените запрос.

public int RemoveSyncData(){ 

    DBHelper db = new DatabaseHelper(context); 
    DateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Calendar calObj = Calendar.getInstance(); 
    String currentDate = dateFormat.format(calObj.getTime()); 
    Log.e("current date",currentDate); 

    int totalRows = db.delete(DATABASE_TABLE_ATTENDANCE,SYN_STATUS + "= ? and " + CREATED_DATE + " < DATE_TIME(?)", new String[] {"C", currentDate}); 

    db.close(); 
    return totalRows; 
} 

Я не тестировал этот выше код, но он должен дать идею.

+0

Обновил его –

+0

Спасибо, Wand, он помог :) – Andrain

+0

Рад, что он помог –

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