SQLite 中是不是有 Long 类型?

Posted

技术标签:

【中文标题】SQLite 中是不是有 Long 类型?【英文标题】:Is there type Long in SQLite?SQLite 中是否有 Long 类型? 【发布时间】:2012-01-30 03:27:00 【问题描述】:

我想创建一个列类型为Long 而不是Integer 的表。可能吗?

【问题讨论】:

【参考方案1】:

来自SQLite docs

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

由于long是8字节,INTEGER也可以保存8字节的值,所以可以使用INTEGER

【讨论】:

我输入 1549251913000 从 SQLite 获取时不匹配 请检查您是否错误地将其转换为int,确保您始终使用long。【参考方案2】:

将列创建为INTEGER 类型:

db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_A + "("
                + KEY + " INTEGER" + ")");

long 值放入INTEGER 列:

contentValues.put(KEY, object.getLongValue());
db.insert(TABLE_A, null, contentValues);

重要提示:从光标中检索值为LONG

Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_A, null);
long value = cursor.getLong(0);

【讨论】:

和一直使用INTEGER相比有什么区别?【参考方案3】:

我认为没有 long 类型。您可以使用 INTEGER(或)Numeric。这是支持的数据类型的链接http://www.sqlite.org/datatype3.html

【讨论】:

【参考方案4】:

他上面的链接描述了一个 64 位整数或本质上是长的,另见 What is the difference between SQLite integer data types like int, integer, bigint, etc.?

和 Version of SQLite used in android?

【讨论】:

【参考方案5】:

您只需定义一个整数类型的列。 SQLite 根据您的输入将列长度设置为 1,2,4,8。

【讨论】:

【参考方案6】:

SQLIte 将根据您的输入设置合适的整数宽度

【讨论】:

【参考方案7】:

INTEGER 可以存储 long 但要从 cursor 获取 long 应该这样做:

int type = cursor.getType(j);

String value = cursor.getString(j);
try 
       int intValue = Integer.parseInt(value);
       field.set(object, intValue);
     catch (NumberFormatException e) 
       long longValue = Long.parseLong(value);
       field.set(object, longValue);

我用它来存储 timestampsqlite

【讨论】:

以上是关于SQLite 中是不是有 Long 类型?的主要内容,如果未能解决你的问题,请参考以下文章

SQLite 中的 NUMERIC 和 INTEGER 类型是不是完全相同?

数据类型/存储类在 SQLite 中是不是重要?

Java中long和Long有啥区别

SQLite 3 中的数据类型

Android中SQLite的Cursor如何取得boolean型数据

Sqlite 使用