- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个使用 sqlite 数据库的字典应用程序。当我在终端中运行应用程序时使用此命令 java -jar RememberDict.jar
存在的 jar 文件的路径它可以工作,但是当我从应用程序所在的位置以外的其他位置运行它时,它会给我错误,我相信它来自此代码:
try {
conn = DriverManager.getConnection("jdbc:sqlite:" + System.getProperty("user.dir") + File.separator +"raw" + File.separator + "dict.db");
} catch (SQLException ex) {
System.out.println("connot connect to words.db");
throw new Exception("Cannot connect to words.db");
}
所以具体来说,当我运行这个命令时java -jar ~/NetBeansProjects/RememberDict/dist/RememberDict.jar
它给出这样的错误:
connot connect to words.db
Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException
at database.Database.getFavWords(Database.java:122)
at rememberdict.FavoritesPanel.<init>(FavoritesPanel.java:36)
at rememberdict.GUIController.<init>(GUIController.java:62)
at rememberdict.RememberDict$1.run(RememberDict.java:11)
at java.awt.event.InvocationEvent.dispatch(InvocationEvent.java:311)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:744)
at java.awt.EventQueue.access$400(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:697)
at java.awt.EventQueue$3.run(EventQueue.java:691)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(ProtectionDomain.java:75)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:714)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)
编辑:
我想我找到了解决方案,我的数据库文件(dict.db)位于原始文件夹中,该文件夹与 jar 文件位于同一文件夹中。实际上我想从 jar 文件存在的位置加载数据库文件。使用以前的代码java无法找到数据库文件并且抛出这些异常,过了一会儿我想出了这个解决方案:
String separator = File.separator;
String databasePath = Database.class.getProtectionDomain().getCodeSource().getLocation().getPath();
String currentDir = databasePath.substring(0, databasePath.lastIndexOf(separator) + 1) + "raw" + separator + "dict.db";
conn = DriverManager.getConnection("jdbc:sqlite:" + currentDir);
我认为,如果我们从 jar 文件存在的位置运行应用程序,尽管没有找到该文件,以前的代码仍然可以加载数据库文件。
最佳答案
System.getProperty("user.dir")
将返回程序运行的目录,而不是主文件夹。
因此在这种情况下,sqlite 文件应该始终与您的 java 程序所在的文件夹相同。
关于java - 当程序从另一个目录运行时 DriverManager.getConnection 不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26084653/
调用oracle函数时DriverManager.getConnection与DriverManager.registerDriver()有什么区别? 我经常只使用DriverManager.getC
我想对这段代码进行单元测试,以验证调用了哪个 DriverManager.getConnection() 。DriverManager.getConnection(url,user,pass) 或 D
Apache Tomcat 6.0.35 hibernate 问题 com.mchange.v2.resourcepool.BasicResourcePool$AcquireTask@352e71c4
我正在尝试为调用 DriverManager.getConnection() 的方法编写单元测试。我正在使用 PowerMock 1.5 和 easymock。不知何故,Powermock 无法模拟
最近,我们在Hive连接中添加了SSL。我们通过添加 ssl=1;sslTrustStore=C:\\keytabs\\keys.truststore;trustStorePassword=foo 到
我有以下代码来测试新服务器上访问数据库的链接,一切都适用于现有服务器,并且我能够访问该文件夹。 !if.exists 返回 true,我可以使用 Runtime.getRuntime().exec("
我有一个应用程序,其目的是支持 jdbc:hive:// 和 jdbc:hive2:// 协议(protocol)的 JDBC 连接。以下代码加载这两种协议(protocol)相应的 JDBC 驱动程
尝试连接到我的 Oracle 11.1.0.7.0 时数据库使用 jdbc 和 ojdbc6.jar在匹配版本中,我发现了两个变体。 假设一个字符串 DBURL 形式的 jdbc:oracle:thi
我一直在尝试检测 getconnection 方法以获取在 JDBC 连接建立期间传递的 DB_URL。据我所知,DriverManager 的检测工作正常,因为注入(inject)部分工作正常而不会
已关闭。此问题需要 debugging details 。目前不接受答案。 编辑问题以包含 desired behavior, a specific problem or error, and the
我正在使用 Java 和 mysql 作为数据库,但遇到了一个奇怪的问题:我的一位客户的连接非常不稳定,有时丢包率可能很高。好吧,我知道这不是软件的错误,但我去那里进行了测试,当程序调用“Driver
我正在开发一个 Java 应用程序,该应用程序可以连接到我的办公室网络,也可以不连接到我的办公室网络。 我的问题是,当用户未连接时,DriverManager.getConnection() 需要长达
我们在找出与 DriverManager 建立连接时收到错误消息的原因时遇到了一些麻烦。 这是我们的代码 package Databank; import java.sql.Connection; i
我有一个类,它连接到 H2 数据库并运行多个 SQL 语句。 public class H2Persistence implements IPersistence { private Conn
我正在尝试将 Java 程序连接到本地主机中的数据库。我的问题看起来很简单,但我找不到任何答案。 当我尝试编译时,出现以下错误: DriverManager.getConnection cannot
我正在尝试使用标准 JDBC 方式连接到数据库 connection = DriverManager.getConnection(url, username, password); 是否有连接超时的最
这个问题在这里已经有了答案: Connect Java to a MySQL database (14 个答案) 关闭 8 年前。 我正在尝试使用一个 Java 类,它在过去对我来说已经非常有用,以
我正在编写一些 gradle 插件,现在我遇到了 DriverManager 没有看到 buildscript 依赖项中定义的 JDBC 驱动程序的问题: 我有下一个 build.gradle 文件:
我正在编写一些 gradle 插件,现在我遇到了 DriverManager 没有看到 buildscript 依赖项中定义的 JDBC 驱动程序的问题: 我有下一个 build.gradle 文件:
我正在使用 jruby,并通过 db2jcc4.jar 文件调用 DB2/BIGSQL 数据库。我在插入和选择方面都建立了完美的连接,然后突然间我开始收到错误“未初始化的常量 DriverManage
我是一名优秀的程序员,十分优秀!