web-dev-qa-db-fra.com

Comment insérer des valeurs double et float dans sqlite?

Voici mon code de création de base de données.

@Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + 
                _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + 
                TIME + " INTEGER, " + 
                LONGI + " TEXT, "+
                LATI + " TEXT, "+
                SPEED + " TEXT, "+
                ACCU + " TEXT);");
    }

Puis voici l'ajout d'un code de point de données

private void addGeoDataEntry(double logi, double lati, float speed, float accu) {
        SQLiteDatabase db = gpsDataHelper.getWritableDatabase();
        ContentValues values = new ContentValues();
        values.put(TIME, System.currentTimeMillis());
        values.put(LONGI, logi+"");
        values.put(LATI, lati+"");
        values.put(SPEED, speed+"");
        values.put(ACCU, accu+"");
        db.insertOrThrow(TABLE_NAME, null, values);
    }

quand j'appelle

addGeoDataEntry(10.0,11.0,3.0f,1.1f);

cela donne l'erreur suivante. Comment régler ceci?

03-14 13:57:26.910: I/Database(27910): sqlite returned: error code = 1, msg = near "1.0": syntax error
53
dinesh707

REAL est ce que vous recherchez. Documentation des types de données SQLite

101
WarrenFaith

SQL prend en charge les types d'affinités suivants:

  • TEXTE
  • NUMERIC
  • ENTIER
  • RÉAL
  • GOUTTE

Si le type déclaré d'une colonne contient l'un de ces symboles "REAL", "FLOAT" ou "DOUBLE", la colonne a une affinité "REAL".

13
Sandhu

Je pense que vous devriez donner les types de données de la colonne sous la forme [~ # ~] numérique [~ # ~] ou [~ # ~] double [~ # ~] ou [~ # ~] float [~ # ~] ou [~ # ~] réel [~ # ~]

Lire http://sqlite.org/datatype3.html pour plus d'informations.

5
Chandra Sekhar

en fait, je pense que votre code est très bien .. vous pouvez sauvegarder ces valeurs sous forme de chaînes (TEXT) comme vous l'avez fait .. (si vous le souhaitez)

et vous obtenez probablement l'erreur pour System.currentTimeMillis () qui est peut-être trop grande pour INTEGER

1
Joe