2013-03-19 4 views
3

У меня есть следующий вопрос, который держит меня занятым в течение некоторого времени.
Я строю проект Java в Netbeans, и у меня есть встроенная sqlite DB, которую я использую в этом проекте.
В настоящее время БД находится в упаковке src/release/.Добавление встроенного sqlite-db в проект Netbeans

я ссылаться на БД из кода следующим образом:

c = DriverManager.getConnection("jdbc:sqlite:src/release/db.db3");

Когда я запускаю проект изнутри Netbeans это работает без каких-либо проблем. Но когда я пытаюсь создать его и запустить созданный jar-файл (в папке dist).

Я получаю следующее сообщение об ошибке (в переводе с голландского описания):

соединения Открытия не удалось: путь к экру/выпуск/db.db3: "C: \ Users \ idxxxxx \ Documents \\ расстояние \ ЦСИ» не существует

при обращении к БД в коде, как это:
c = driverManager.getConnection("jdbc:sqlite:db.db3");
и добавление DB-файл в корневом каталоге вывода-каталог (так не в банке сам), приложение работает частично, но в моем приложении отсутствуют некоторые db-данные (пустые поля со списком).
Так что, похоже, проблема тоже.

Мой вопрос:

  • Как я могу добавить встроенный дб - SQLite в данном случае - в NetBeans для моего проекта, так это будет частью моего проекта?
  • Где я должен поместить db-файл и как я могу ссылаться на него в своем проектном коде?

Я не хочу, чтобы конечный пользователь, чтобы увидеть какой-либо DB-файл в файл (ы), он будет получать.
поэтому я хотел бы, чтобы db-файл был частью .jar, если это возможно.

Tnx

+0

Я думаю, что вы, вероятно, перепутались SRC/ОПЗ на некоторых местах. Взгляните на такую ​​ошибку - src/release/db.db3 и не удалось: путь к scr/release/db.db3; – hovanessyan

ответ

2

SQLite нужны отдельные файлы, даже без необходимости обновления базы данных.

Необходимо обеспечить блокировку и обеспечить свойства ACID базы данных.

SQLite from inside .jar

  • SQLite предназначен для работы с прямым доступом к файлам.
  • SQLite может потребовать дополнительных привилегий, недоступных в некоторых средах.

Файлы данных SQLite могут быть извлечены из JAR во временное место при запуске.

Это нехороший выбор для написания URL-адреса базы данных, непосредственно в программу.

getConnection("jdbc:sqlite:src/release/db.db3");

Пусть ваш взгляд приложения для файла. Если не найден: error: File db.db3 not found сообщение. Тогда знайте пользователя, а не программу идет не так, но отсутствует файл базы данных.

Поскольку вы работаете с java, легко создать динамический url.
, например. "jdbc:sqlite:"+PathToApp +"/data/db.db3".
Затем приложение знает, где скопировать извлеченный файл (db.db3 из банки).

экстракт SQlite из .jar

  • Вы можете позволить Java делать это для вас.
  • jdbc:sqlite::resource:
  • Вам необходимо sqlite-jdbc JAR, поэтому извлеките JAR-файл и добавьте в JAR приложения.

Файлы DB будут извлечены во временную папку System.getProperty(“java.io.tmpdir”).

например.

[...] 
import org.sql.*; 
import org.sqlite.*; 
[...] 
try { 
    Class.forName("org.sqlite.JDBC"); 
    SQLiteConfig config = new SQLiteConfig(); 
    config.enableFullSync(true); 
    config.setReadOnly(false); 
    SQLiteDataSource ds = new SQLiteDataSource(config); 
    ds.setUrl("jdbc:sqlite::resource:"+ 
       getClass().getResource("db.db3").toString()); 
    conn = ds.getConnection(); 
}catch(SQLException se) 
{ 
    System.out.println("SQLError: "..."); 
} 

Обновить окт. 2014

org.sqlite SQLiteConfig + SQLiteDataSource

2014 October 8th: sqlite-jdbc-3.8.6.jar Updated to sqlite 3.8.6

+0

SQLiteConfig и SQLiteDataSource встроены в класс или определенный пользователем класс ..? Пожалуйста, предложите .. – Kogile

+0

@Kogile: посмотри мое обновление. –

+0

okay .. Как включить эти файлы в мой проект. или эти файлы нуждаются в каких-либо библиотеках, которые нужно импортировать. Пожалуйста, помогите мне. – Kogile

Смежные вопросы