sqlitejdbc在64-bit jre下的问题

wdufo 2009-09-24 01:37:41
环境:win2003, 64-bit JRE, sqlite_version = 3.6.14.2

目前发现以下两种情况时会出现错误:
1. 使用UNC路径时,无法创建数据库。如 \\server\d$\drive
2. 本地路经过中包含中文字符时,无法创建数据库。如C:\建国大业首映没

得到的异常:
java.sql.SQLException: out of memory
at org.sqlite.DB.throwex(DB.java:380)
at org.sqlite.NestedDB._open(NestedDB.java:77)
at org.sqlite.DB.open(DB.java:91)
at org.sqlite.Conn.<init>(Conn.java:149)
at org.sqlite.Conn.<init>(Conn.java:49)
at org.sqlite.JDBC.connect(JDBC.java:86)
at java.sql.DriverManager.getConnection(Unknown Source)
at java.sql.DriverManager.getConnection(Unknown Source)
---------------------------------------------

代码如下,在connection = DriverManager.getConnection一行抛出异常。

Java代码

public Connection getConnection(String url) {
Connection connection = null;
try {
connection = DriverManager.getConnection("jdbc:sqlite:" + url, "", "");
Statement st = connection.createStatement();
st.setQueryTimeout(60);
st.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
logger.error("open connection failed", e);
}
return connection;
}



debug跟进去以后发现sqlitejdbc可以使用Native和Nested方式来访问数据库,优先尝试Native方式。程序在sqlitejdbc.jar中找不到\native\Windows\amd64这个路径后(只有\native\Windows\x86),便尝试使用Nested方式来访问数据库。最后在NestedDB这个类的_open()方法中出错。
抛出的异常时Out Of Memory(这个比较让人郁闷,异常信息不准确??)

所以目前尝试的解决方案是通过源码编译出64位dll,放到\native\Windows\amd64路径下,不知是否可行。请大家指点一下如何编译64位的sqlitejdbc.dll,或者有没有其他方式能解决问题呢?

非常感谢!

...全文
134 2 打赏 收藏 转发到动态 举报
写回复
用AI写文章
2 条回复
切换为时间正序
请发表友善的回复…
发表回复
wdufo 2009-09-27
  • 打赏
  • 举报
回复
@_@
wdufo 2009-09-25
  • 打赏
  • 举报
回复
补充一下,以上两点问题都是在64 bit JRE下出现的。

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧