【问题标题】:How to insert double and float values to sqlite?如何将 double 和 float 值插入 sqlite?
【发布时间】:2012-03-14 12:04:24
【问题描述】:

以下是我的数据库创建代码。

@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

【问题讨论】:

    标签: android sqlite


    【解决方案1】:

    REAL 是您正在寻找的。 Documentation of SQLite datatypes

    【讨论】:

    • 我将 TEXT 更改为 REAL,并删除了 +"" 部分以将它们作为数字传递。我仍然得到同样的错误。我如何添加: public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { db.execSQL("DROP TABLE IF EXISTS" + TABLE_NAME); onCreate(db);} }
    • 你能显示完整的错误信息吗? syntax error 之后的部分?我想查看完整的消息和错误
    • 感谢您的链接。我遇到的问题是我在 LOGIN、LATI 等中添加了一些错误的 vlaues。我忘记了它们是名字。我在那里添加了值。
    • 如果不更改数据库版本,永远不会调用 onUpgrade。因此,最好的方法是删除您的应用并进行全新安装以对其进行测试。
    【解决方案2】:

    SQL 支持以下类型的关联:

    • 文本
    • 数字
    • 整数
    • 真实
    • BLOB

    如果列的声明类型包含“REAL”、“FLOAT”或“DOUBLE”中的任何一个,则该列具有“REAL”亲和性。

    【讨论】:

      【解决方案3】:

      我认为您应该将列的数据类型指定为 NUMERICDOUBLEFLOATREAL

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

      【讨论】:

        【解决方案4】:

        存储在 SQLite 数据库中的每个值都具有以下存储类之一 - 您可以使用 REALDOUBLEBLOBNUMERIC 之一。详情如下:

        真实: 该值是一个浮点值,存储为一个 8 字节的 IEEE 浮点数。

        BLOB: 该值是一团数据,完全按照输入的方式存储。

        整数: 该值是一个有符号整数,根据值的大小存储在 1、2、3、4、6 或 8 个字节中。

        数字: 此列可能包含使用所有五个存储类的值。

        更多详细信息:SQLite Data Type

        【讨论】:

          【解决方案5】:

          实际上我认为您的代码很好..您可以像以前一样将这些值保存为字符串 (TEXT)..(如果您愿意的话)

          你可能会得到 System.currentTimeMillis() 的错误,它可能对 INTEGER 来说太大了

          【讨论】:

          • +1 System.currentTimeMillis() 返回 long。所以是的,超过了int 的大小。
          • @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.
          • @njzk2 您正在阅读哪些文档?在 android/Java 中,它返回一个 long。 developer.android.com/reference/java/lang/…
          • @Doomsknight:是的,但是long 适合INTEGER 的sqlite 类型,最多可达8 个字节。
          • @njzk2 啊,是的。哎呀。好久没写了,没看懂
          【解决方案6】:
              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);
                  }
              }
          

          【讨论】:

          • 只需使用 float 和 double 代替整数,它就可以完成 gr8
          • 停止评论您自己的问题!停止发布仅代码问题而没有任何解释,请不要使用gr8 之类的内容。我们是专业人士,对吧?
          • 对不起,错字。我的意思是评论你自己的答案应该更像是一个编辑。
          猜你喜欢
          • 2013-12-28
          • 2017-03-04
          • 1970-01-01
          • 1970-01-01
          • 2019-06-15
          • 1970-01-01
          • 2019-06-27
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多