Android 如何向sqlite插入双精度和浮点值?
下面是我的数据库创建代码Android 如何向sqlite插入双精度和浮点值?,android,sqlite,Android,Sqlite,下面是我的数据库创建代码 @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + _ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + TIME + " INTEGER, " + LONG
@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
REAL
是您要找的 我认为您应该将列的数据类型指定为数值型或双精度或浮点型或实型
阅读更多信息。事实上,我认为您的代码很好。。您可以像以前一样将这些值保存为字符串(文本)。。(如果你想的话)
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);
}
}
您可能会得到系统的错误。currentTimeMillis()对于INTEGER来说可能太大了。SQL支持以下类型的亲缘关系:
- 正文
- 数字的
- 整数
- 真实的
- 斑点
如果列的声明类型包含这些“REAL”、“FLOAT”或“DOUBLE”中的任何一个,则该列具有“REAL”关联。存储在SQLite数据库中的每个值都具有以下存储类之一− 您可以使用其中一个REAL或DOUBLE或BLOB或NUMERIC。详情如下: REAL: 该值是一个浮点值,存储为8字节IEEE浮点数 BLOB: 该值是一组数据,与输入时完全相同 整数: 该值是有符号整数,根据值的大小存储在1、2、3、4、6或8字节中 数字: 此列可能包含使用所有五个存储类的值
有关更多详细信息:我将文本更改为实数,并删除“+”部分以将其作为数字传递。但我还是犯了同样的错误。我添加的任何方式:public void onUpgrade(SQLiteDatabase db,intoldversion,intnewversion){db.execSQL(“如果存在删除表”+TABLE_NAME);onCreate(db);}}}您能显示完整的错误消息吗?
语法错误之后的部分
?我想看到完整的信息和错误谢谢你的链接。我遇到的问题是,我在登录、LATI等中添加了一些错误的Vlaue。我忘记了它们是名称。我在那里添加了值。如果不更改数据库版本,将永远不会调用onUpgrade。所以最好的方法是删除你的应用程序,并进行一个干净的安装来测试它。只需使用float和double代替整数,就可以了。停止评论你自己的问题!停止只发布代码问题而不做任何解释,请不要使用类似于gr8
的东西。我们是专业人士,对吧?对不起,错别字。我的意思是评论你自己的答案应该更像是编辑。+1System.currentTimeMillis()
返回一个long
。所以是的,超过了int
size.@doomsnight:不,它没有。从文档:INTEGER。该值是一个有符号整数,根据值的大小存储在1、2、3、4、6或8字节中。
@njzk2您正在阅读哪些文档?在android/Java中,它返回一个长字符串@末日骑士:是的,但是long
适合sqlite类型INTEGER
,它最多可以有8个字节。@njzk2是的。呜呜声。我写这篇文章已经很久了,我理解错了