2015-06-26 1 views
2

Я создал программное обеспечение с использованием базы данных NetBeans и SQLite. Когда я чищу и строю, исполняемый файл jar и база данных работают нормально. Он может читать и записывать данные из базы данных.Как изменить разрешение чтения/записи базы данных SQLite на окна?

Затем я создал .exe-файл, используя «install creator», и после установки программного обеспечения в файлах программ на моем ПК с Windows создается одна и та же папка dist. Когда я запускаю исполняемый файл jar из этой папки dist, он может читать только базу данных, но не может писать. Я получаю это сообщение

java.sql.SQLException: попытка написать базу данных только для чтения

Может кто-нибудь, пожалуйста, помогите мне решить эту проблему? Заранее спасибо.

ответ

3

проверить эту

Проблема, как выясняется, является то, что драйвер PDO SQLite требует, что если вы собираетесь делать операцию записи (INSERT, UPDATE, DELETE, DROP и т.д.), затем папку содержащаяся в базе данных, должна иметь права на запись, а также фактический файл базы данных.

Я нашел эту информацию в комментарии в самой нижней части страницы руководства драйвера PDO SQLite.

+0

Установлен драйвер PDO. Я нашел странное поведение. Файл db отлично работает на рабочем столе или в других каталогах. Но когда я помещал db в папку C, он говорит: «java.sql.SQLException: попытка написать базу данных только для чтения»; –

+0

@anismizi Может быть диск C является охраняемой территорией. Как правило, программы, запущенные на диске c с разрешения администратора. Просто попробуйте изменить разрешение на доступ к диску C. –

+0

@anismizi Если ответ вам полезен, тогда не забудьте принять ответ. –

0

Вы должны написать конкретные данные пользователя в папку данных приложения текущего пользователя.

Вы можете получить РОУМИНГ каталог из

String path = System.getenv("APPDATA"); 

Или, если вы хотите, чтобы сделать его независимым от платформы вы можете использовать GetProperty, который даст вам пользователей домашнего каталога, а затем вы можете написать в определенный каталог:

String path = System.getProperty("user.home"); 

Вы можете сформировать SQLite на пути, как

String sqliteUrl = "jdbc:sqlite:"+path+"sample.db"; 
+0

Пробовал. Но не получилось. Я нашел странное поведение.Файл db отлично работает на рабочем столе или в других каталогах. Но когда я помещал db в папку C, он говорит: «java.sql.SQLException: попытка написать базу данных только для чтения»; –

0

Используйте этот код строки:

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\Yourfile.db"

Я могу сказать, что это правильный способ тару БД без разрешения на диске, как C: \

0

Используйте эту строку кода:

Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\databasefile.db" 

Я могу сказать, что это правильный способ создания БД в папке приложения на диске, таком как C: \ без разрешения