it-swarm.com.de

Wie füge ich einen SQLite-Eintrag mit der Datums- und Uhrzeitangabe 'now' in Android application ein?

Angenommen, wir haben eine Tabelle erstellt als:

create table notes (_id integer primary key autoincrement, created_date date)

Zum Einfügen eines Datensatzes würde ich verwenden

ContentValues initialValues = new ContentValues(); 
initialValues.put("date_created", "");
long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);

Aber wie setzt man die Spalte date_created auf now? Um es klar zu machen, die

initialValues.put("date_created", "datetime('now')");

Ist nicht die richtige Lösung. Es wird lediglich die Spalte auf "datetime ('now')" Text gesetzt.

105
droidguy

Sie können die datetime-Funktion nicht mit dem Java wrapper "ContentValues" verwenden. Sie können entweder Folgendes verwenden:

  • SQLiteDatabase.execSQL, damit Sie eine unformatierte SQL-Abfrage eingeben können.

    mDb.execSQL("INSERT INTO "+DATABASE_TABLE+" VALUES (null, datetime()) ");
    
  • Oder die Java Datum/Uhrzeit-Funktionen:

    // set the format to sql date time
    SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 
    Date date = new Date();
    ContentValues initialValues = new ContentValues(); 
    initialValues.put("date_created", dateFormat.format(date));
    long rowId = mDb.insert(DATABASE_TABLE, null, initialValues);
    
188
e-satis

In meinem Code verwende ich DATETIME DEFAULT CURRENT_TIMESTAMP als Typ und Einschränkung der Spalte.

In Ihrem Fall wäre Ihre Tabellendefinition

create table notes (
  _id integer primary key autoincrement, 
  created_date date default CURRENT_DATE
)
40
Gautier Hayoun

Methode 1

CURRENT_TIME – Inserts only time
CURRENT_DATE – Inserts only date
CURRENT_TIMESTAMP – Inserts both time and date

CREATE TABLE users(
    id INTEGER PRIMARY KEY,
    username TEXT,
    created_at DATETIME DEFAULT CURRENT_TIMESTAMP
);

Methode 2

db.execSQL("INSERT INTO users(username, created_at) 
            VALUES('ravitamada', 'datetime()'");

Methode Mit Java Datumsfunktionen

private String getDateTime() {
        SimpleDateFormat dateFormat = new SimpleDateFormat(
                "yyyy-MM-dd HH:mm:ss", Locale.getDefault());
        Date date = new Date();
        return dateFormat.format(date);
}

ContentValues values = new ContentValues();
values.put('username', 'ravitamada');
values.put('created_at', getDateTime());
// insert the row
long id = db.insert('users', null, values);
28
Rikin Patel

Es gibt einige Optionen, die Sie verwenden können:

  1. Sie können stattdessen die Zeichenfolge "(DATETIME ('now'))" verwenden.
  2. Füge die Datumszeit selbst ein, zB mit System.currentTimeMillis ()
  3. Geben Sie beim Erstellen der SQLite-Tabelle einen Standardwert für die Spalte created_date als aktuelle Datumszeit an.
  4. Verwenden Sie SQLiteDatabase.execSQL , um direkt einzufügen.
7
sooniln

Für mich sieht das Problem so aus, als würden Sie "datetime('now')" als Zeichenfolge und nicht als Wert senden.

Mein Gedanke ist, eine Möglichkeit zu finden, das aktuelle Datum und die aktuelle Uhrzeit zu erfassen und als Datums- und Uhrzeitwert an Ihre Datenbank zu senden, oder eine Möglichkeit zu finden, das in SQLite integrierte (DATETIME('NOW')) Parameter

Schauen Sie sich die Antworten auf diese SO.com-Frage an - sie könnten Sie in die richtige Richtung führen.

Hoffentlich hilft das!

6
Jared Harley

Sie können die Funktion von Java das ist:

ContentValues cv = new ContentValues();
cv.put(Constants.DATE, Java.lang.System.currentTimeMillis());  

Auf diese Weise speichern Sie in Ihrer Datenbank eine Nummer.
Diese Nummer könnte folgendermaßen interpretiert werden:

    DateFormat dateF = DateFormat.getDateTimeInstance();
    String data = dateF.format(new Date(l));

Anstelle von l in neues Datum (l) müssen Sie die Nummer in die Datumsspalte einfügen.
Du hast also dein Date.
Zum Beispiel speichere ich in meiner Datenbank diese Nummer: 1332342462078
Aber wenn ich die obige Methode aufrufe, habe ich folgendes Ergebnis: 21.03.2012 16.07.42

4
Marco Gallella

Basierend auf der @ e-satis-Antwort habe ich eine private Methode für meine "DBTools" -Klasse erstellt, sodass das Hinzufügen des aktuellen Datums jetzt ganz einfach ist:

...
import Java.text.SimpleDateFormat;
import Java.util.ArrayList;
import Java.util.Date;
...
        private String getNow(){
            // set the format to sql date time
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Date date = new Date();
            return dateFormat.format(date);
        }
...

Benutze es jetzt so: values.put("lastUpdate", getNow());

2
Cedric Simon

Dieses Codebeispiel kann tun, was Sie wollen:

http://androidcookbook.com/Recipe.seam?recipeId=41

1
Kristy Welsh

Funktioniert bei mir perfekt:

    values.put(DBHelper.COLUMN_RECEIVEDATE, geo.getReceiveDate().getTime());

Speichern Sie Ihr Datum als lange.

1
Stefan Beike

Stellen Sie sicher, dass das Feld nicht gleichzeitig mit dem Versuch, einen Standardzeitstempel mit dem Ausdruck "(DATETIME ('now'))" einzufügen, als "not null" markiert ist.

0