SQLiteStatement.columnValue returns a Long when an Integer is expected
Originally reported on Google Code with ID 15 ``` When you use columnValue method to retrieve an Integer, you obtain a Long. Here is a small test case:
SQLiteStatement st = cnx.prepare("select 1;"); st.step(); Assert.assertEquals(Integer.class, st.columnValue(0).getClass());
The problem comes from SQLiteStatement.java, line 1044:
return value == ((long) ((int) value)) ? Integer.valueOf((int) value) : Long.valueOf(value);
This instruction works fine unless you mix Integer, Byte, Short, Long, Float or Double value as the result of the inline condition. For example, the following inline condition:
<cond> ? new Integer(1) : new String()
has a type of Object: the common base class of Integer and String. But the following condition:
<cond> ? new Integer(1) : new Long(1)
has a type of Long. This is because a promotion occurs on Integer and it becomes a Long.
you must use standard condition like:
if (value == (int)value) { return Integer.valueOf(value); } return Long.valueOf(value);
It works fine for me. ```
Reported by `olivier.monaco@free.fr` on 2010-08-19 12:18:18
Comments (3)
-
-
``` fixed in revision 193 ```
Reported by `sereda` on 2010-08-21 22:55:11 - Status changed: `Fixed`
-
Reported by `sereda` on 2010-08-23 20:10:30 - Status changed: `Delivered` - Labels added: FixVersion-201
- Log in to comment
``` Thx! ```
Reported by `sereda` on 2010-08-19 12:25:21 - Status changed: `Accepted`