Как вставить двойные и плавающие значения в sqlite?

40

Ниже приведен код создания 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);");
    }

Затем здесь добавляется код точки данных

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

когда я звоню

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

он дает следующую ошибку. Как это исправить?

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

5 ответов

75
Лучший ответ

REAL - это то, что вы ищете. Документация типов данных SQLite

  • 0
    Я изменил ТЕКСТ на РЕАЛЬНЫЙ, и удалил + "" части, чтобы передать их как числа. Тем не менее я получаю ту же ошибку. Как бы я ни добавил: public void onUpgrade (база данных SQLiteDatabase, int oldVersion, int newVersion) {db.execSQL («DROP TABLE IF EXISTS» + TABLE_NAME); onCreate (дБ);}}
  • 0
    не могли бы вы показать полное сообщение об ошибке? часть после syntax error ? Я хотел бы видеть полное сообщение и ошибку
Показать ещё 2 комментария
5

SQL Поддерживает следующие типы сродств:

  • ТЕКСТ
  • NUMERIC
  • INTEGER
  • РЕАЛ
  • BLOB

Если объявленный тип для столбца содержит любые из этих "REAL", "FLOAT" или "DOUBLE", то столбец имеет "REAL" сродство.

  • 1
    Да, верно, REAL, FLOAT, DOUBLE будет НАСТОЯЩИМ. Я тестировал с FLOAT, и он работает как РЕАЛЬНЫЙ. Спасибо за эту информацию!
4

Я думаю, вы должны указать типы данных столбца как NUMERIC или DOUBLE или FLOAT или REAL

Подробнее читайте http://sqlite.org/datatype3.html.

1

на самом деле я думаю, что ваш код в порядке. Вы можете сохранить эти значения как строки (ТЕКСТ) так же, как и вы.. (если хотите)

и вы, вероятно, получите ошибку для System.currentTimeMillis(), которая может быть слишком большой для INTEGER

  • 0
    +1 System.currentTimeMillis() возвращает long . Так что да, превышает размер int .
  • 3
    @ Doomsknight: нет, это не так. из документа: INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
Показать ещё 3 комментария
-4
    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
    вы найдете это очень полезным, это класс, который я использую для обработки базы данных
  • 0
    просто используйте float и double вместо целого числа, и это будет просто gr8
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню