2012-03-14 38 views
45

A continuación se muestra mi código de creación db.¿Cómo insertar valores dobles y flotantes en sqlite?

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

Entonces 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 siguiente error. ¿Cómo arreglar esto?

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

Respuesta

84

REAL es lo que estás buscando. Documentation of SQLite datatypes

+0

cambié el TEXTO en REAL, y eliminé + "" partes para pasarlas como números. Aún recibo el mismo error. De todos modos, agregué: public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL ("DROP TABLE IF EXISTS" + TABLE_NAME); onCreate (db);} } – dinesh707

+0

¿podría mostrar el mensaje de error completo? la parte después del 'error de sintaxis' Me gustaría ver el mensaje completo y el error – WarrenFaith

+0

Gracias por el enlace. El problema que tuve fue que agregué algunos mensajes incorrectos para INICIAR SESIÓN, LATI, etc. Olvidé que son nombres. Agregué valores allí. – dinesh707

4

Creo que se debe dar a los tipos de datos de la columna como NUMÉRICO o DOBLE o FLOAT o VERDADERO

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

-3
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); 
     } 
    } 
+0

encontrará esto muy útil esta es la clase que uso para el manejo de la base de datos –

+0

solo use float y doble en lugar del entero y solo hará gr8 –

+3

¡Deje de comentar su propia pregunta! Deja de publicar solo preguntas de código sin ninguna explicación y no uses algo como 'gr8'. Somos profesionales, ¿verdad? – WarrenFaith

1

En realidad creo que el código está bien .. puede guardar esos valores como cadenas (TEXTO) igual que lo hizo .. (si quieres)

y es probable que obtener el error de la System.currentTimeMillis() que podría ser demasiado grande para INTEGER

+0

+1 'System.currentTimeMillis()' devuelve un 'long'. Entonces sí, excede el tamaño 'int'. – Doomsknight

+2

@Doomsknight: no, no. del documento: 'INTEGER. El valor es un entero con signo, almacenado en 1, 2, 3, 4, 6 u 8 bytes, dependiendo de la magnitud del valor. – njzk2

+0

@ njzk2 ¿Qué documentos está leyendo? En Android/Java, devuelve un largo. http://developer.android.com/reference/java/lang/System.html#currentTimeMillis() – Doomsknight

5

SQL compatible con los siguientes tipos de afinidades:

  • TEXTO
  • NUMER IC
  • INTEGER
  • VERDADERO
  • BLOB

Si el tipo declarado para una columna contiene cualquiera de estos, "flotar" "real", o "doble", la columna tiene afinidad 'real' .

+1

Sí correcto, REAL, FLOTACIÓN, DOBLE será REAL. Probé con FLOAT y funciona como REAL. ¡Gracias por esta información! – Phuong

Cuestiones relacionadas