2012-04-08 3 views
0

Ich habe das Datum als Zeichenfolge in SQLite-Datenbanktabelle gespeichert. Was ich brauche Ich muss die Werte abrufen, die in den letzten sieben Tagen gespeichert wurden. Ich habe versucht, indem ich folgendes benutze, aber es zeigt keine Werte.Wie kann man Werte aus der Datenbank (Sqlite) mit Datum in Android abrufen?

Meine Datenbank Funktion

 public Cursor paymentWeek(Activity activity) 
    { 

     String[] from = { _PAYMENTID, NAME, REQUESTEDDATE, FROMAD, TOADD, EMAILBODYPAYMENT, AMOUNT}; 

     SQLiteDatabase db = getReadableDatabase(); 

     String orderby = REQUESTEDDATE+" DESC"; 

     Cursor cursor = db.rawQuery("select * from " + PAYMENTTABLE + " where " + REQUESTEDDATE + " BETWEEN " 
     + "date('now')" + " AND " + "date('now','-7 days')", null); 

     activity.startManagingCursor(cursor); 

     return cursor; 
    } 

Calling function 

    Cursor week = db.paymentWeek(this); 
       String[] weekly = new String[] { PaymentAppDataBase.REQUESTEDDATE,PaymentAppDataBase.PAYMENTNAME,PaymentAppDataBase.AMOUNT }; 
       int[] sevendays = new int[] { R.id.Date,R.id.Name,R.id.Amount }; 

       SimpleCursorAdapter weekcursor = 
        new SimpleCursorAdapter(this, R.layout.listview, week, weekly, sevendays); 
       setListAdapter(weekcursor); 
       db.close(); 

Es wäre hilfreich, wenn euch aussortieren dieses Problem. Ich bleibe hier drüben.

+1

so schwer sein wird, aber vielleicht kennt jemand einen Weg. Ist es möglich, das Design Ihrer Datenbank zu ändern? Das Speichern von Daten in Ihrer Datenbank als Millis (keine Strings) würde Ihnen das Leben erleichtern. – Roger

+0

können Sie ein Array von nos von Tagen erstellen und in für z. B. verwenden. Wählen Sie * aus der Tabelle aus, wobei das Datum in ('4/8/2012', '4/9/2012', ....); nicht effizient ist, aber mit Strings arbeitet. –

+0

Danke für deinen Kommentar ... Ya ich kann meine db als Millis ändern .. Es wäre toll, wenn Sie einige Tipps geben, wie man das macht, weil ich neu bei Android-Programmierung bin ... Danke – GoCrazy

Antwort

1

try Nach Abfrage Datensätze für letzte Woche erhalten (7 Tage):

"select * from " + PAYMENTTABLE + " where " + REQUESTEDDATE + "DATE_SUB(CURDATE() ,INTERVAL 7 DAY) AND CURDATE()"; 
+0

Danke für Ihren Kommentar .. Ich habe es versucht, aber es zeigt 04-09 07: 59: 15.314: E/AndroidRuntime (314): android.database.sqlite.SQLiteException: in der Nähe von "7": Syntaxfehler:, während der Kompilierung: Wählen Sie * aus Paymentdetails wo requesteddateDATE_SUB (CURDATE(), INTERVALL 7 DAY) UND CURDATE() – GoCrazy

0

Sie müssen nicht Ihr db Design ändern.

Schreiben Sie einfach Ihre eigene Konvertierung von dateString in eine lange Methode und fügen Sie sie in die Klasse DateUtil.java ein. Rufen Sie sie dann auf, wo auch immer Sie etwas mit dem Datumstyp machen möchten.

Das Verfahren sollte wie folgt aussehen:

public static long convertStringDateToLong(String date, String yourDateFormat) { 
    Long time = 0L; 
    try { 
     SimpleDateFormat df = new SimpleDateFormat(yourDateFormat); 
     Date d = null; 
     try { 
      d = df.parse(date); 
     } catch (ParseException e) { 
      e.printStackTrace(); 
     } 
     time = d.getTime(); 
    } catch (Exception e) { 
     e.printStackTrace(); 
    } 
    return time; 
} 

wo yourDateFormat etwas sein sollte wie: „MM/tt /“

Verwandte Themen