我使用NetBeans和SQLite数据库创建了一个软件。当我清理和构建时,可执行jar文件和数据库工作正常。它可以从数据库中读取和写入数据。
然后我使用“安装创建者”创建了.exe文件,安装软件后,在我的Windows PC上的程序文件中创建了相同的dist文件夹。当我从那个dist文件夹运行可执行jar文件时,它只能读取数据库,但无法写入。我收到这条消息
java.sql.SQLException:尝试编写只读数据库
有人可以帮我解决这个问题吗?提前致谢。
检查一下
事实证明,问题是PDO SQLite驱动程序要求如果要进行写操作(INSERT,UPDATE,DELETE,DROP等),则数据库所在的文件夹必须具有写权限,如以及实际的数据库文件。
我在PDO SQLite驱动程序手册页的最底部的注释中找到了这些信息。
您应该将用户特定数据写入当前用户的Application Data文件夹。
您可以从中获取ROAMING目录
String path = System.getenv("APPDATA");
或者,如果您想使其与平台无关,您可以使用getProperty,它将为您提供用户主目录,然后您可以写入特定目录:
String path = System.getProperty("user.home");
你可以在路径上形成sqlite
String sqliteUrl = "jdbc:sqlite:"+path+"sample.db";
使用此代码行:
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\databasefile.db"
我可以说这是在应用程序文件夹中创建数据库的正确方法,如C:\无权限
使用此代码行:
Environment.GetFolderPath(Environment.SpecialFolder.CommonApplicationData) + "\\Yourfile.db"
我可以说这是在未经C许可的情况下创建数据库的正确方法,如C:\