¿Cómo insertar valores dobles y flotantes en sqlite?

A continuación se muestra mi código de creación de DB.

@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);"); } 

Luego aquí va la adición de un código de punto de datos

 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); } 

Cuando llamo

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

Da el error siguiente. ¿Cómo arreglar esto?

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

REAL es lo que buscas. Documentación de tipos de datos SQLite

Creo que debería dar los tipos de datos de la columna como NUMERIC o DOUBLE o FLOAT o REAL

Lea http://sqlite.org/datatype3.html para más información.

SQL soporta los siguientes tipos de afinidades:

  • TEXTO
  • NUMÉRICO
  • ENTERO
  • REAL
  • GOTA

Si el tipo declarado para una columna contiene alguno de estos "REAL", "FLOAT" o "DOUBLE", entonces la columna tiene afinidad "REAL".

De hecho, creo que su código está bien .. usted puede guardar los valores como cadenas (TEXT) al igual que lo hizo .. (si lo desea)

Y probablemente obtiene el error para el System.currentTimeMillis () que puede ser demasiado grande para INTEGER

  enter code here package in.my; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; public class DBAdapter { private final Context context; private DatabaseHelper DBHelper; private SQLiteDatabase db; private static final String DATABASE_NAME = "helper.db"; private static final int DATABASE_VERSION = 1; public static final String KEY_ID = "_id"; private static final String Table_Record = "create table Student (_id integer primary key autoincrement, " + "Name text not null,rate integer, Phone text not null,Salary text not null,email text not null,address text not null,des text not null,qual text not null,doj text not null);"; public DBAdapter(Context ctx) { this.context = ctx; DBHelper = new DatabaseHelper(context); } private class DatabaseHelper extends SQLiteOpenHelper { public DatabaseHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); // TODO Auto-generated constructor stub } @Override public void onCreate(SQLiteDatabase db) { // TODO Auto-generated method stub db.execSQL(Table_Record); } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { // TODO Auto-generated method stub } } public DBAdapter open() throws SQLException { db = DBHelper.getWritableDatabase(); return DBAdapter.this; } //---closes the database--- public void close() { DBHelper.close(); } public long insertTitle(String name,String phone,String web,String des,String address,String doj,String qual,String sal,int rate) { ContentValues initialValues = new ContentValues(); initialValues.put("Name", name); initialValues.put("Phone", phone); initialValues.put("email", web); initialValues.put("des", des); initialValues.put("Salary", sal); initialValues.put("qual", qual); initialValues.put("address", address); initialValues.put("doj", doj); initialValues.put("rate", rate); return db.insert("Student", null, initialValues); } public boolean deleteTitle(long rowId) { return db.delete("Student", KEY_ID + "=" + rowId, null) > 0; } public boolean UpdateTitle(long id,String name,String phone,String web,String des,String address,String doj,String qual,String sal,int rate) { ContentValues initialValues = new ContentValues(); initialValues.put("Name", name); initialValues.put("Phone", phone); initialValues.put("email", web); initialValues.put("des", des); initialValues.put("qual", qual); initialValues.put("Salary", sal); initialValues.put("address", address); initialValues.put("doj", doj); initialValues.put("rate", rate); return db.update("Student",initialValues, KEY_ID + "=" + id, null)>0; //return db.insert("Student", null, initialValues); } public Cursor getAllRecords() { return db.query("Student", new String[] { KEY_ID, "Name", "Phone", "email", "address", "des", "qual", "doj", "Salary", "rate" }, null, null, null, null, null); } } 
  • Sqlite plugin para Eclipse: depurar la base de datos sqlite en el dispositivo Android en vivo
  • El incremento automático de SQLite no funciona
  • Cómo actualizar la base de datos Sqlite para una sola columna utilizando cláusula WHERE en android
  • Sincronización entre la base de datos SQL Lite en un dispositivo android y la base de datos de SQL Server
  • Limitación de una consulta SQLite en android
  • Android - proveedores de contenido sqlite y multithreading
  • Estrategia para actualizar la aplicación de Android (con base de datos)
  • Sincronizar / actualizar bases de datos sqlite
  • ¿Un cursor SQLite vacío devolverá true para isBeforeFirst, isAfterLast, ambos o ninguno?
  • Mejor manera de acceder a la base de datos en la aplicación multi-threaded Android?
  • onDowngrade () en SQLiteOpenHelper (u otra forma de no bloquearse al degradar)
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.