【发布时间】:2016-07-11 17:11:46
【问题描述】:
我正在使用 Eclipse Neon、GWT 和 sqlite 编写一个 Web 应用程序。我的 webapp 在某个点连接到位于 war 目录中的数据库(我知道该应用程序只能访问该目录,服务器端)。当我尝试创建连接时:
Class.forName("org.sqlite.JDBC");
return DriverManager.getConnection("jdbc:sqlite:db.db");
控制台出现以下异常:
java.security.AccessControlException: access denied ("java.io.FilePermission" "C:\c:\Users\me\workspace\BookLovers\war\db.db" "read")
[...]
GRAVE: javax.servlet.ServletContext log: Exception while dispatching incoming RPC call
com.google.gwt.user.server.rpc.UnexpectedException: Service method 'public abstract boolean it.me.gc.booklovers.client.LoginService.login(java.lang.String,int) throws java.lang.IllegalArgumentException' threw an unexpected exception: java.lang.Error: Internal Error in _syscall()
[...]
Caused by: java.lang.Error: Internal Error in _syscall()
这是我第一次收到这样的错误,互联网似乎没有注意到这个问题。我无法解释自己的一件事是为什么“C:/”在 db 路径中重复两次;此外,如果异常只是“拒绝访问”,我会理解,但我认为我做得对(我还尝试将 db 移动到 WEB-INF 文件夹中,但无济于事)。
你怎么看?
【问题讨论】:
-
如果你输入
.\db.db会怎样?结果如何? -
谢谢你,阿波斯托洛斯。我在 Windows 上运行,所以不确定该语法。但是,我更改了字符串(引用“.\\db.db”),结果是一样的。路径字符串和之前一样:
"C:\c:\Users\me\workspace\BookLovers\war\db.db" "read" -
确定两件事:您使用的是哪个 xerial jdbc 版本?尝试直接使用完整路径,看看会发生什么。老实说,还没有遇到过这样的事情。
-
我使用的是 3.7.2,来自java2s.com/Code/JarDownload/sqlite/sqlite-jdbc-3.7.2.jar.zip。打算改成绝对路径,看看有什么变化。
-
而且,没有变化。即使使用双 C:\ 连接字符串,路径仍然相同:
jdbc:sqlite:C:\\users\\me\\workspace\\BookLovers\\war\\db.db
标签: java sqlite gwt web-applications