У меня проблемы с доступом к моей базе данных на сервере. Я использую этот фрагмент кода, чтобы попытаться подключиться.
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
Итак, мой вопрос заключается в следующем ... что после базы и как это относится к моему каталогу (откуда запускается сервлет)? У меня нет 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
<< этот дает мне «Отказано в доступе» </p>
EPIC currdir = /usr/local/cpanel/base
<< этот дает мне «Отказано в доступе» </p>
EPICEST! =
<< это нормально .. но подождите .. НЕТ EPICER ??? </p>
System.out.println("EPICER = " + this.getClass().getResource("dbname").toString());
НЕ ПЕЧАТАЕТ !! что? мой журнал фильтруется, чтобы я не мог видеть путь? Кроме того, ни один из этих путей не работает :(
<<<< --- ОБНОВЛЕНИЕ --- >>>>
Не печатал, потому что «this» возвращало ноль, и я фактически получал NPE в этой строке; Таким образом, нет печати. Дух.
ПОСЛЕДНИЕ РЕДАКТИРОВАТЬ:
РЕШИТЬ!
Хорошо, так что я все делал неправильно, и я публикую это на тот случай, если какой-нибудь другой бедняга собирается потратить три дня, как я ..
this.getClass().getResource("dbname").toString())
"это" возвращалось к нулю, потому что что? СЮРПРИЗ, нет ServletContext
итак
getServletContext()
также возвращал ноль (что я экспериментировал позже)
Из других ресурсов в интернете я узнал, что все, что я делал, было неправильно, потому что каждый раз, когда я повторно развертывал файл WAR, БД перезаписывалась ... поэтому я создал небольшой каталог / home / username / вызывал dbfiles и использовал команды:
String dir= "jdbc:sqlite:/home/username/dbfiles/dbname.db";
connection = DriverManager.getConnection(dir);
и это работает !!
Спасибо всем