I want to create a table with the column type Long
instead of Integer
. Is it possible?

- 820
- 1
- 7
- 18

- 5,092
- 15
- 50
- 77
7 Answers
From the SQLite docs
INTEGER. The value is a signed integer, stored in 1, 2, 3, 4, 6, or 8 bytes depending on the magnitude of the value.
Since long
is 8 byte and INTEGER
can also save values of 8 bytes, you can use INTEGER
.

- 39,458
- 17
- 135
- 184
-
1i input 1549251913000 and mismatch when getting it from SQLite – Nanda Z Feb 04 '19 at 03:28
-
2Please check whether you're mistakenly type casting it to `int`, make sure you're using long throughout. – Inder Kumar Rathore Feb 06 '19 at 05:19
Create the column as an INTEGER
type:
db.execSQL("CREATE TABLE IF NOT EXISTS " + TABLE_A + "("
+ KEY + " INTEGER" + ")");
Put the long
value in INTEGER
column:
contentValues.put(KEY, object.getLongValue());
db.insert(TABLE_A, null, contentValues);
Important: retrieve the value from cursor as LONG
Cursor cursor = db.rawQuery("SELECT * FROM " + TABLE_A, null);
long value = cursor.getLong(0);

- 8,611
- 6
- 47
- 72

- 5,701
- 2
- 34
- 39
I don't think there is type long. Either you can use INTEGER (or) Numeric. Here is link with supported data types http://www.sqlite.org/datatype3.html

- 65,990
- 13
- 130
- 167
You just define a column with Integer type. SQLite sets the column length to 1,2,4,8 depending on your input.

- 2,108
- 1
- 27
- 35
His above link depicts a 64 bit Integer or Essentially a long, also see What is the difference between SQLite integer data types like int, integer, bigint, etc.?

- 1
- 1

- 1,342
- 1
- 14
- 31
the INTEGER can store the long but to get long from cursor should do like this :
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);
}
i use this to store timestamp in sqlite

- 755
- 7
- 22