无法使用相对路径查找(连接到)数据库

时间:2012-03-15 08:52:18

标签: java servlets tomcat7

我无法在服务器上访问我的数据库。我正在使用代码片段来尝试连接。

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);

它有效!!

谢谢大家

2 个答案:

答案 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)中

希望这有助于某人