我的代码多年来一直像魅力一样.它打破了Mac上最近的
Java更新.
>使用java 6(1.6.0_65-b14-462-11M4609)时,它按预期工作
>使用java 7(1.7.0_60-b19)时,它不起作用
这是测试代码:
PreparedStatement p = mConnection.prepareStatement("SELECT rowid,* FROM cases_customers WHERE case_id = ?"); p.setLong(1,2); ResultSet r = p.executeQuery(); System.out.println("One result? " + r.next()); p = mConnection.prepareStatement("SELECT rowid,* FROM cases_customers WHERE case_id = ? + '0'"); p.setLong(1,2); r = p.executeQuery(); System.out.println("At least one result? " + r.next());
输出:
At least one result? false At least one result? true
由于添加,第二个查询强制将数据绑定为数字.因此,即使数据在代码中被绑定了很长时间,它也会在某种程度上被转换为字符串.
我没有更改我的sqlite JDBC驱动程序(这是xerial的3.7.2).
我使用Java Web Start分发这个桌面应用程序,并且通过直接调用javac进行编译的GNU make文件“手动”完成编译/ jar捆绑.编译后的jar / app按预期工作,我的意思是上面的代码输出true / true.
这是构建配置:
在运行代码时,我最终在DB.java(来自sqlite-jdbc-3.7.2)中,在方法DB#sqlbind中:
else if (v instanceof Long) { return bind_long(stmt,pos,((Long) v).longValue()); }
>在java 6中,这个DB抽象类实现在NativeDB.java中,并调用本机bind_long.
>在java 7中,这个DB抽象类实现在nestedDB.java中并调用它:
.
@Override synchronized int bind_long(long stmt,int pos,long v) throws sqlException { return bind_text(stmt,Long.toString(v)); // Todo }
这是long值绑定为String的位置.
解决方法
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。