如何向 sqlite 插入 double 和 float 值?

下面是我的 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
154915 次浏览

你要找的就是 REAL

我认为应该给出列的数据类型,如 数字双倍漂浮物真的

阅读 http://sqlite.org/datatype3.html了解更多信息。

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

actually I think your code is just fine.. you can save those values as strings (TEXT) just like you did.. (if you want to)

您可能会得到 System.currentTimeMillis ()的错误,这个错误对于 INTEGER 来说可能太大了

SQL 支持以下类型的关联:

  • 短信
  • 数字
  • 整数
  • 真的
  • 一团

如果一个列的声明类型包含这些“ REAL”、“ FLOAT”或“ DOUABLE”中的任何一个,则该列具有“ REAL”关联。