2013-07-30 10 views
5

I dodaje ciąg znaków, datę, czas i int wartości do sqlite bazy danych przy użyciu tego koduget ciąg, data, godzina i int z sqlite bazy danych w Android

void addRemAction(RemActions remaction) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    ContentValues values = new ContentValues(); 
    values.put(KEY_ACTOINS_TITLE, remaction.getTitle()); // Action title 
    values.put(KEY_ACTIONS_MSG, remaction.getMsg()); // action msg 



    values.put(KEY_ACTIONS_DATE, dateFormat.format(new Date())); // action date 
    values.put(KEY_ACTIONS_TIME, remaction.getTime()); // action time 
    values.put(KEY_ACTIONS_PLACE_LONG, remaction.getPlong()); // action place long 
    values.put(KEY_ACTIONS_PLACE_LAT, remaction.getPlat()); // action place lat 

    // Inserting Row 
    db.insert(TABLE_ACTIONS, null, values); 
    db.close(); // Closing database connection 

i to jest mój kod, aby pobrać go

RemActions getRemAction(int id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    Cursor cursor = db.query(TABLE_ACTIONS, new String[] {KEY_ACTOINS_TITLE, KEY_ACTIONS_MSG, KEY_PLACES_NAME, KEY_ACTIONS_DATE, KEY_ACTIONS_TIME}, KEY_ACTIONS_ID + "=?", 
      new String[] { String.valueOf(id) }, null, null, null, null); 
    if (cursor != null) 
     cursor.moveToFirst(); 

    RemActions remActions = new RemActions(cursor.getString(0), 
      cursor.getString(1), cursor.getString(2), cursor.getString(3), cursor.getInt(4)); 
    // return remActions 
    return remActions; 

teraz mój ide daje mi błędy, ponieważ 4 argument w moim konstruktorze dla klasy RemAction jest typu Date z klasy java.util.date.

Moje pytanie brzmi: "jak ustawić kursor, aby uzyskać format daty?"

chory b zadowolony, w celu zapewnienia dodatkowego kodu na życzenie

+1

witamy w SO..close db, a także kursor w metodzie getRemAction() da wyjątek. – TheFlash

+0

Możesz także użyć 'cursor.getDate (1)', aby uzyskać datę. Nie używałem ich od jakiegoś czasu, ale powinno to być coś takiego: http://www.coderanch.com/t/445539/JDBC/databases/retrieve-Date-JDBC-sql –

+0

@TheDarkKnight Uwaga: Android nie nie używaj JDBC i nie ma getDate w SQLite. – m0skit0

Odpowiedz

11

Ponieważ nie można zapisać wartości daty/czasu w SQLite, należy najpierw przekonwertować je na milisekundy i zapisać jako takie.

Date c = new Date(System.currentTimeMillis()); 
long milliseconds = c.getTime(); 
//To get current time 

Jeśli następnie trzeba zmienić milisekund powrotem do formatu daty:

Date c = new Date(cursor.getLong(4)); 

Następnie można sformatować datę używając SimpleDateFormat.

+0

Czy Twoja data java.util.Date? –

+1

'Typy inconvertible; Nie można rzucić Long na java.util.Date' – Zenadix

+0

@Zenadix Myślę, że miała na myśli 'new Date (cursor.getLong (4))'. – TWiStErRob

1

Skoro przechowywania tę wartość jako Date#getTime(), można go odzyskać z new Date(cursor.getLong(4)).

Poza tym musisz zamknąć Cursor, czego nie robisz.

Powiązane problemy