Java环境下无法向SQLite插入大Long值的问题求助
解决SQLite JDBC插入大Long值失败的问题
我之前也碰到过类似的坑,用旧版sqlitejdbc-v056.jar处理大64位Long值时确实会出现插入失败的情况,原因主要出在旧驱动对JDBC类型的处理逻辑上,下面给你几个可行的解决方案:
方案1:升级SQLite JDBC驱动
sqlitejdbc-v056.jar是比较老旧的版本了,它对JDBC的setLong方法的实现存在局限,无法正确处理超出32位整数范围的大Long值(比如你提到的1522746908000L,这个值已经远大于2^31-1)。
建议替换成维护更活跃的Xerial SQLite JDBC驱动(现在的groupId是org.xerial),新版本的驱动完全支持SQLite的64位INTEGER类型,setLong方法可以正常处理这类大值。记得移除旧的sqlitejdbc-v056.jar,避免类冲突。
方案2:改用setObject方法替代setLong
如果暂时无法升级驱动,可以尝试换一种参数绑定方式,用setObject让驱动自动处理类型转换:
long tsMills = 1522746908000L; preparedStatement.setObject(parameterIndex, tsMills);
这种方式可以绕过旧驱动对setLong的错误处理逻辑,让SQLite正确识别并存储64位整数。
额外注意事项
- 确认你的表结构中目标列的类型确实是
INTEGER(SQLite的INTEGER是原生支持64位的,而INT虽然兼容,但最好明确使用INTEGER来避免歧义); - 插入后可以通过SQL语句
SELECT typeof(your_column) FROM your_table验证存储的类型是否为integer,确保数据正确写入。
内容的提问来源于stack exchange,提问作者Alexei
相关产品推荐
相关产品推荐

