2017-05-02 1 views
0

Ich habe ein Problem beim Einfügen einiger Datetime-Werte in meine SQLite-Datenbank.Datumswert in Android sqlite einfügen

Ich habe zwei datepickers, ich kann ein Datum wählen, aber danach, wenn ich es in meine Datenbank einfügen, weiß ich nicht warum, aber die Zeile für die 2 Daten haben das aktuelle Datum .. Wie kann ich tun das Datum einfügen, das ich im Datepicker ausgewählt habe?

In meiner Datenbank deklarierte ich diese Spalten als DATETIME.

Hier ist meine get-Setter-Klasse für die Tage:

public String getDate_debut() { 
    SimpleDateFormat dateFormat = new SimpleDateFormat(
      "dd-MM-yyyy HH:mm:ss"); 
    Date date = new Date(); 
    return dateFormat.format(date); 
} 

public void setDate_debut(String date_debut) { 
    this.date_debut = date_debut; 
} 

public String getDate_fin() { 
    SimpleDateFormat dateFormat = new SimpleDateFormat(
      "dd-MM-yyyy HH:mm:ss"); 
    Date date = new Date(); 
    return dateFormat.format(date); 
} 

public void setDate_fin(String date_fin) { 
    this.date_fin = date_fin; 
} 

Hier ist, wie ich das Datum eines Datumsauswahl erhalten. Ich bin mir nicht sicher über die Art, wie ich meine Zeichenfolge formatiere und ob ich formatieren muss oder ob ich sie einfach als Zeichenfolge hinzufügen kann.

private DatePickerDialog.OnDateSetListener datepickerdernier 
     = new DatePickerDialog.OnDateSetListener() { 
    @Override 
    public void onDateSet(DatePicker view, int year, int month, int dayOfMonth) { 

     year_x2 = year; 

     //les DatePicker 
     month_x2 = month +1; 
     day_x2 = dayOfMonth; 
     datefin = (TextView)findViewById(R.id.TVDatePickerDernier); 
     datefin.setText(year_x2+"-"+month_x2+"-"+day_x2); 
    } 
}; 


      String date2 = datefin.getText().toString(); 
      //im not sure about the following lines 
      SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd"); 

      Date date_dernier = dateFormat.parse(date2); 

Und am Ende ich einfügen es:

Cours c = new Cours(); 
         c.setBranche_cours(selectedBranche);    
         c.setDate_fin(date2); //should i set the string ?   
         dbhelper.Open(); 
         dbhelper.insertCours(c); 

Wie kann ich in meinem db das Datum einfügen ich das aktuelle Datum ausgewählt und nicht?

@UPDATE - ** Wie kann ich das eingefügte Datum aktualisieren?

Ich habe eine andere Tätigkeit, und ich möchte, um die Daten ändern, ich vorher gewählt haben, aber ich bin nicht in der Lage ..

Hier ist meine SQLite-Methode:

public void updateCours(Date olddatedebut, Date newdatedebut, Date olddatedernier, Date newdatedernier) 
{ 
Open(); 

db.execSQL("UPDATE "+TABLE_COURS+" set "+COLONNE_DATEPREMIER+"=date('"+newdatedebut+"') where "+COLONNE_DATEPREMIER+"=date('"+olddatedebut+"')"); 
db.execSQL("UPDATE "+TABLE_COURS+" set "+COLONNE_DATEDERNIER+"=date('"+newdatedernier+"') where "+COLONNE_DATEDERNIER+"=('"+olddatedernier+"')"); 
} 

Und wie gebe ich das zu meine Methode auf meine Tätigkeit:

 //this is the new date of the 2nd datepicker 
         String datedernier = convertDateFormat(datenew2, "yyyy-MM-dd", "dd-MMM-yyyy"); 
         //this is the new date of the 1st datepicker 
         String datepremier = convertDateFormat(datenew1, "yyyy-MM-dd", "dd-MMM-yyyy"); 
         String date_debutold= intent.getExtras().getString("date_debut"); 
         String date_finold=intent.getExtras().getString("date_fin"); 
         //this is the current date recorded in my database from my datepicker 
         String date_debut1= convertDateFormat(date_debutold, "yyyy-MM-dd", "dd-MMM-yyyy"); 
         //this is the current date recorded in my darabase from my 1st datepicker 
         String date_fin1= convertDateFormat(date_finold, "yyyy-MM-dd", "dd-MMM-yyyy"); 

         //nouvelledatedebut 
         Date date_premier= new Date(datepremier); 
         Date date_dernier = new Date(datedernier); 
         Date date_premier2 = new Date(date_debut1); 
         Date date_fin2 = new Date(date_fin1); 
         dbhelper.Open(); 
         dbhelper.updateCours(selected_brancheold,selectedBranchenew,date_premier2,date_premier,date_fin2,date_dernier, 

Antwort

0

versuchen diese

public static String convertDateFormat(String date, String curFormat, String desFormat){ 
    String newFormat = null; 
    Date frmtDate = null; 
    try { 
     SimpleDateFormat sdf = new SimpleDateFormat(curFormat); 

     frmtDate = sdf.parse(date); 
     SimpleDateFormat formatter = new SimpleDateFormat(desFormat); 
     newFormat = formatter.format(frmtDate); 

    } catch (Exception e) { 
     newFormat = date; 
    } 
    return newFormat; 
} 

Probe

String result = convertDateFormat(date2, "yyyy-MM-dd", "dd-MMM-yyyy"); 
c.setDate_fin(result); 
+0

Entschuldigung für die Frage, aber ich erstelle diese Methode in meiner Tätigkeit? – David

+0

Wenn es in Ihrer Aktivität keine Notwendigkeit für statische verwenden 'private String convertDateFormat' – sajan

+0

Ich habe versucht, was Sie mir gab, aber es fügt immer noch das aktuelle Datum .. – David

2

Das ist, weil Sie eine gewisse Logik auf der Getter-Methode machen und Einstellen der new Date(), dass das Datum auf dem date_fin Attribut überschreiben. Wenn Sie insertCours versuchen, wird diese Methode versuchen, alle Get-Methoden für das Objekt zu finden, das Sie einfügen möchten. Versuchen Sie, diese ändern:

public String getDate_fin() { 
    SimpleDateFormat dateFormat = new SimpleDateFormat(
      "dd-MM-yyyy HH:mm:ss"); 
    Date date = new Date(); 
    return dateFormat.format(this.date_fin); 
} 

diesen

public String getDate_fin() { 
    return this.date_fin; 
} 

Wenn Sie noch ein Format mit dem Datum (String) hinzufügen möchten, können Sie es auf der Getter-Methode machen, aber ich weiß nicht empfiehl es.

+0

Ich dachte in der Verwendung von String anstelle von Datetime-Werte, aber nach, muss ich diese 2 Daten vergleichen .. Und dann habe ich 3 Listviews, und ich muss nach Datum sortieren .. Aber ist es möglich, es zu tun, auch wenn ich es als String einfügen? – David

+0

Das bedeutet auch, dass ich den Typ der Spalte ändern muss, oder? String anstelle von Datetime? – David

+0

@ David, verwenden Sie das Attribut als String oder Datum/Datetime/Kalender ist Ihnen überlassen. Wie Tostodora schon sagte, hat SQLite keinen Datetime-Typ. Wenn Sie also in die DB einfügen, können Sie das Datum als String (wie Sie es getan haben) oder ganze Zahlen verwenden. Eine direkte Option ist, Ihr Attribut Datum ist ein String-Typ und wenn Sie zwei das Datum mit einem anderen vergleichen, konvertieren Sie es in ein Date-Objekt. – niarb

0

Jeder Wert in einer SQLite Datenbank gespeichert (oder manipuliert von der Datenbank-Engine ) hat eine der folgenden Speicherklassen:

NULL. Der Wert ist ein NULL-Wert.

INTEGER.Der Wert ist eine vorzeichenbehaftete ganze Zahl, die in 1, 2, 3, 4, 6 oder 8 Bytes gespeichert wird, abhängig von der Größe des Werts.

REAL. Der Wert ist ein Gleitkommawert, der als 8-Byte IEEE Gleitkommazahl gespeichert wird.

TEXT. Der Wert ist eine Textzeichenfolge, die mit der Datenbankcodierung (UTF-8, UTF-16BE oder UTF-16LE) gespeichert wird.

BLOB. Der Wert ist ein Datenblock, der genau so gespeichert wird, wie er eingegeben wurde.

Es gibt kein DATETIME. SQlite speichern Sie es als TEXT. Sie können keinen Tag hinzufügen. Sie müssen es lesen und analysieren. Und das gleiche gilt, wenn Sie es speichern. Sie müssen es analysieren.

Ich hoffe, es war nützlich.

+0

Also sollte ich als String Wert speichern? – David

+0

Ich speicher es immer als TEXT. Wenn Sie es in create table als datetime deklarieren, wird es gemäß diesem https://sqlite.org/datatype3.html als numerisch gespeichert. Edit: Speichern Sie es als TEXT, aber wenn Sie es lesen, analysieren Sie es auf DATUM. Es sollte als DATE in Ihrem Java-Code behandelt werden. – Tostadora

+0

Ok danke, ich werde es so ändern! – David

Verwandte Themen