我无法在服务器上访问我的数据库。我正在使用代码片段来尝试连接。
String currentDir = new File(".").getAbsolutePath();
String currdir = System.getProperty("user.dir");
System.out.println("EPIC currentDir = " + currentDir);
System.out.println("EPIC currdir = " + currdir);
String builder = "jdbc:sqlite:"+ currentDir +"dbname";
现在.. printlns告诉我:
currentDir = /usr/local/cpanel/base/.
currdir = /usr/local/cpanel/base
我知道这会产生SQLException,因为我的数据库位于 ../WEB-INF/lib/dbname 因此,我收到此错误消息并不奇怪:
java.sql.SQLException: opening db: '/usr/local/cpanel/base/.dbname': Permission denied
所以我的问题是这个......什么是基础之后以及它与我的目录(运行servlet的位置)有何关系?我没有SSH去寻找它(滚动眼睛),如果有人能够对这个问题有所了解,我会很高兴! 提前致谢!
编辑:奇怪的东西
我正在使用这些命令测试所有这些..
String currentDir = new File("dbname").getAbsolutePath();
String currdir = System.getProperty("user.dir");
System.out.println("EPIC currentDir = " + currentDir);
System.out.println("EPIC currdir = " + currdir);
System.out.println("EPICER = " + this.getClass().getResource("dbname").toString());
System.out.println("EPICEST! = ");
这是输出:
EPIC currentDir = /usr/local/cpanel/base/dbname
<<这个给了我“权限被拒绝”
EPIC currdir = /usr/local/cpanel/base
<<这个给了我“权限被拒绝”
EPICEST! =
<<这没关系......但是等等......没有EPICER ???
System.out.println("EPICER = " + this.getClass().getResource("dbname").toString());
不要打印!!什么?是我的日志被过滤,以防止我查看路径?而且,这些路径都不起作用:(
<<<< --- --- UPDATE>>>>
没有打印,因为“this”返回null并且我实际上正在这条线上获得NPE;因此,没有println。咄。
最后编辑: 解决!
好的,所以我说这一切都错了,我发布这个以防万一其他可怜的家伙就像我一样浪费三天..
this.getClass().getResource("dbname").toString())
“这个”因为什么而回来了? SURPRISE,没有ServletContext 所以
getServletContext()
也返回null(我后来尝试过的东西)
我从互联网上的其他资源中了解到,我这样做的方式都是错误的,因为每次重新部署WAR文件时,数据库都会被覆盖..所以我在我的网站上创建了一个小目录/ home / username /调用dbfiles并使用命令:
String dir= "jdbc:sqlite:/home/username/dbfiles/dbname.db";
connection = DriverManager.getConnection(dir);
它有效!!
谢谢大家
答案 0 :(得分:1)
user.dir 是系统用户的目录。 如果要查找应用程序内的文件,请使用ServletContext.getRealPath()
答案 1 :(得分:0)
使用JDBC(只读)从Applet访问数据库:
我建立的连接类似于此处列出的http://www.shoaibinamdar.in/blog/?p=313,但是已经读了
ds.setUrl("jdbc:sqlite::resource:"+
getClass().getResource("sample.db").toString());
我把
ds.setUrl("jdbc:sqlite:resource/sample.db");
sample.db进入/myprojectname/resource/sample.db,资源与/ myprojectname / src /
在同一目录(myprojectname)中希望这有助于某人