Database 如何建立一个在所有Mac电脑上运行的JavaDB连接,使其JAR能够在Windows10上建立连接?
我想让Windows用户可以在Mac上使用Java编写的工作程序,但Windows上的连接失败,并显示一条奇怪的错误消息,指示Windows正在Database 如何建立一个在所有Mac电脑上运行的JavaDB连接,使其JAR能够在Windows10上建立连接?,database,macos,sqlite,windows-10,connection-string,Database,Macos,Sqlite,Windows 10,Connection String,我想让Windows用户可以在Mac上使用Java编写的工作程序,但Windows上的连接失败,并显示一条奇怪的错误消息,指示Windows正在C::\Windows\system32中查找数据库。SQLite DB与Java程序位于同一文件夹中: Connection conn = DriverManager.getConnection("jdbc:sqlite:Databasess/Logic1.sqlite"); 我制作了一个罐子,并将它放在一个名为“Aurora”的文件夹中,所以它看起
C::\Windows\system32
中查找数据库。SQLite DB与Java程序位于同一文件夹中:
Connection conn = DriverManager.getConnection("jdbc:sqlite:Databasess/Logic1.sqlite");
我制作了一个罐子,并将它放在一个名为“Aurora
”的文件夹中,所以它看起来像这样:
TeachingMachine
Aurora.v2.jar
Images
Audio
databases
Logic1.sqlite
Logic2.sqlite
将整个文件夹转移到另一台Mac电脑上,它就能正常工作。
将同一文件夹传输到运行Windows 10的HP,它会立即显示我从HP复制到Mac的错误:
JAVA.SQL ‘SQLEXCEPTION: path to ’databases/Logic1.sqlite’: C:\windows\system32:’databases’ does not exist
我搜索了有关windows\system32
的帮助请求,以及错误消息的较大部分。我发现有些人的问题涉及到连接SQLite或其他数据库的代码中的小精灵,但到目前为止还没有提到我在这里概述的问题
在我的Windows PC上有一个用于system32
的文件夹,但我正在尝试一个可以维护并分发给运行各种操作系统的人的程序。必须将我的数据库复制到system32
中会弄巧成拙
Connection conn = null;
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:databases/Logic2.sqlite");
return conn;
}catch (Exception e)
这是我使用了一年多的连接基本代码。当然,这里没有提到system32
Connection conn = null;
try {
Class.forName("org.sqlite.JDBC");
conn = DriverManager.getConnection("jdbc:sqlite:databases/Logic2.sqlite");
return conn;
}catch (Exception e)
预期结果是我在任何Mac上尝试过的结果,而在Windows 10上运行相同代码的实际结果是,我只收到一条错误消息。您运行的问题是进程使用的默认目录 在windows上,它显然在使用c:\windows\system32 在Mac上,它正在使用你的应用程序文件夹
因此,您需要为数据库URL指定一个绝对路径,或者您需要更改应用程序的当前工作目录。我认为这就是问题所在,但是,如果PC运行相同版本的Windows,我不能指望所有人。此外,我分发这个东西的方式是,远程用户需要做的就是将新的DBs放入databases文件夹中。那运行Linux的人呢?有没有办法设定一条适用于Mac和PC的绝对路径?非常感谢您的帮助。@user9695085更好的解决方案是使用某种安装程序,将您的文件放在已知的位置,例如用户的主目录之外。user.home系统属性可以起到带头作用。有一些查找当前工作目录的技术,还有一些查找原始jar所在位置的技术。这也可能有所帮助。“安装”程序的位置和“工作目录”是什么,可能取决于操作系统和环境中的各种情况。@Will Hartung。一直在仔细阅读Q-A关于使用SQLiteDBS和编写Java代码来创建自己的数据库的讨论。似乎对于在本地创建和运行的软件来说,您的东西在哪里并不重要。我将为我的项目(在Eclipse中)的一个简单版本复制.java文件,并查看是否可以在这两个版本上使用相同的代码。电脑。子目录“windows32”主要包含dll文件、少量.exe文件和极少数png文件。在一次堆栈溢出讨论中,有人声称数据库是由数据库管理器故意对其作者隐藏的。疯了?@user9695085你把文件放在任何地方,但你不应该。例如,windows32目录“不是你的”,它是系统。你不知道将来会或不会去那里。在Linux系统上,对于文件的去向有不同的做法(不同的发行版标准也各不相同)。在Mac上,也有不同的标准。至少,询问用户想把东西放在哪里很少出错。您可以查看Java Preferences API来记录他们在程序调用中的选择,这样它就不会“忘记”。