Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/database/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/macos/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Database 如何建立一个在所有Mac电脑上运行的JavaDB连接,使其JAR能够在Windows10上建立连接?_Database_Macos_Sqlite_Windows 10_Connection String - Fatal编程技术网

Database 如何建立一个在所有Mac电脑上运行的JavaDB连接,使其JAR能够在Windows10上建立连接?

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”的文件夹中,所以它看起

我想让Windows用户可以在Mac上使用Java编写的工作程序,但Windows上的连接失败,并显示一条奇怪的错误消息,指示Windows正在
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来记录他们在程序调用中的选择,这样它就不会“忘记”。