2012-03-15 80 views
3

我無法訪問服務器上的數據庫。我正在使用代碼片段來嘗試連接。使用相對路徑定位(連接到)數據庫時遇到困難

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 

所以我的問題是這樣的..什麼是基地後如何,涉及到我的目錄(從哪裏servl et運行)?我沒有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 --- >>>>

沒有打印,因爲「這個」被返回null和我其實是在這個越來越NPE 。線;因此,沒有任何的println咄

最後編輯時間: 解決

好了,我要去一下都錯了,我張貼這以防其他一些可憐的傢伙大約是浪費!像我這樣做了三天..

this.getClass().getResource("dbname").toString()) 

「這個」是因爲什麼而返回null的?意外的是,沒有ServletContext的 所以

getServletContext() 

也返回null(這是我與後來的實驗)

我從其他資源學的互聯網絡,我打算這樣做這樣的方式是完全錯誤的,因爲,我每次重新部署WAR文件,數據庫將被覆蓋。所以我在我的/ home /用戶名/被叫DBFILES創建一個小的目錄和使用的命令:

String dir= "jdbc:sqlite:/home/username/dbfiles/dbname.db"; 
connection = DriverManager.getConnection(dir); 

和它的作品!

謝謝大家

+1

錯誤說:「訪問被拒絕」,所以我不認爲有什麼問題與路徑。 – 2012-03-15 08:55:42

+0

[如何從Web檔案的WEB-INF目錄加載資源]的可能重複(http://stackoverflow.com/questions/1108434/howto-load-a-resource-from-web-inf-directory-of- a-web-archive) – Snicolas 2012-03-15 08:57:53

+0

aah,所以它找到數據庫但沒有讀/寫權限? – tricknology 2012-03-15 08:58:09

回答

1

user.dir來是系統用戶的目錄。 如果你想找到你的應用程序的戰爭裏面的文件,然後使用ServletContext.getRealPath()

+0

ServletContext返回null,因爲我是一個noob ..我也不需要使用tomcat7和web.xml(從我可以看到我的不注意眼睛)。但是,我確實發現了將web.xml放入其/ WEB-INF /中的人員的實例。爲什麼?它有什麼作用?如果你有任何資源可以像我一樣爲n00bs拼出來,請分享。此外,我解決了這個問題,它在最後的編輯。 – tricknology 2012-03-15 11:35:57

0

要使用JDBC從一個Applet訪問數據庫(只讀):

我發到這裏列出http://www.shoaibinamdar.in/blog/?p=313了一個類似的連接,但的

ds.setUrl("jdbc:sqlite::resource:"+ 
    getClass().getResource("sample.db").toString()); 

insread我把

ds.setUrl("jdbc:sqlite:resource/sample.db"); 

在sample.db去/ myprojectname/resourc E/sample.db,在同一個目錄(myprojectname)爲/ myprojectname/src目錄資源是/

希望這可以幫助別人

相關問題