2012-03-14 8 views
45

Poniżej znajduje się mój kod tworzenia bazy danych.Jak wstawić wartości podwójne i zmiennoprzecinkowe do 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);"); 
    } 

Następnie udaje się tutaj dodanie kodu punktu danych

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

gdy zgłoszę

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

to daje następujący błąd. Jak to naprawić?

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

Odpowiedz

84

REAL jest tym, czego szukasz. Documentation of SQLite datatypes

+0

Zmieniłem TEKST na PRAWDZIWY i usunąłem części "", aby przekazać je jako liczby. Nadal dostaję ten sam błąd. Dowolny sposób dodania: public void onUpgrade (SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL ("DROP TABLE IF EXISTS" + TABLE_NAME); onCreate (db);} } – dinesh707

+0

Czy mógłbyś wyświetlić pełny komunikat o błędzie? część po "błąd składni"? Chciałbym zobaczyć cały komunikat i błąd. – WarrenFaith

+0

Dziękuję za link. Problem polegał na tym, że dodałem złe adresy do LOGIN, LATI itp. Zapomniałam, że to są imiona. Dodałem tam wartości. – dinesh707

-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

u będzie to bardzo przydatne, to jest klasa, której używam do obsługi baz danych –

+0

wystarczy użyć float i podwójną zamiast liczby całkowitej, a zrobi to po prostu gr8 –

+3

Przestań komentować swoje własne pytanie! Przestań publikować tylko pytania bez żadnego wyjaśnienia i nie używaj czegoś w stylu 'gr8'. Jesteśmy profesjonalistami, prawda? – WarrenFaith

1

rzeczywiście myślę, że kod jest w porządku .. można zapisać te wartości jako ciągi znaków (tekst), tak jak to zrobiłeś .. (jeśli chcesz)

i prawdopodobnie pojawia się błąd za System.currentTimeMillis(), które mogą być zbyt duże dla INTEGER

+0

+1 'System.currentTimeMillis()' zwraca 'long'. Tak, tak, przekracza rozmiar "int". – Doomsknight

+2

@Doomsknight: nie, nie. z dokumentu: 'INTEGER. Wartość jest liczbą całkowitą ze znakiem, przechowywaną w 1, 2, 3, 4, 6 lub 8 bajtach, w zależności od wielkości wartości. " – njzk2

+0

@ njzk2 Które dokumenty czytasz? W Android/Java zwraca długi. http://developer.android.com/reference/java/lang/System.html#currentTimeMillis() – Doomsknight

5

SQL Obsługuje następujące rodzaje pokrewieństwa:

  • TEXT
  • LICZBA IC
  • INTEGER
  • Real
  • BLOB

Jeżeli ogłoszony typu dla zawiera którykolwiek z tych "prawdziwy", "float" lub "double", to kolumna ma 'prawdziwy' powinowactwo .

+1

Tak, prawda, PRAWDZIWE, PŁOMIENIE, PODWÓJNE będzie PRAWDZIWE. Testowałem z FLOAT i działa on jako REAL. Dzięki za te informacje! – Phuong

Powiązane problemy