环境: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,或者有没有其他方式能解决问题呢?
非常感谢!