java - 可执行jar和数据库连接错误

标签 java database jar executable

我用java和数据库做了一个小项目。我在另一台计算机上尝试了它,除了需要在数据库中读取或写入的方法之外,可执行 jar 运行得很好。如果我从 IDE (NetBeans) 启动它,如果我连接到数据库,它就可以正常工作。我能怎么做?我得到的异常(exception)是:

java.sql.SQLNonTransientConnectionException: java.net.ConnectException : Errore
di connessione al server localhost sulla porta 1527 con messaggio Connection ref
used: connect.
        at org.apache.derby.client.am.SQLExceptionFactory40.getSQLException(Unkn
own Source)
        at org.apache.derby.client.am.SqlException.getSQLException(Unknown Sourc
e)
        at org.apache.derby.jdbc.ClientDriver.connect(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at newsletter.Utilities.salva(Utilities.java:80)
        at newsletter.NsLs.salva(NsLs.java:40)
        at newsletter.NSFrame$3.actionPerformed(NSFrame.java:80)
        at javax.swing.AbstractButton.fireActionPerformed(Unknown Source)
        at javax.swing.AbstractButton$Handler.actionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.fireActionPerformed(Unknown Source)
        at javax.swing.DefaultButtonModel.setPressed(Unknown Source)
        at javax.swing.plaf.basic.BasicButtonListener.mouseReleased(Unknown Sour
ce)
        at java.awt.Component.processMouseEvent(Unknown Source)
        at javax.swing.JComponent.processMouseEvent(Unknown Source)
        at java.awt.Component.processEvent(Unknown Source)
        at java.awt.Container.processEvent(Unknown Source)
        at java.awt.Component.dispatchEventImpl(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.LightweightDispatcher.retargetMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.processMouseEvent(Unknown Source)
        at java.awt.LightweightDispatcher.dispatchEvent(Unknown Source)
        at java.awt.Container.dispatchEventImpl(Unknown Source)
        at java.awt.Window.dispatchEventImpl(Unknown Source)
        at java.awt.Component.dispatchEvent(Unknown Source)
        at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
        at java.awt.EventQueue.access$200(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.awt.EventQueue$3.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.awt.EventQueue$4.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Sour
ce)
        at java.awt.EventQueue.dispatchEvent(Unknown Source)
        at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
        at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
        at java.awt.EventDispatchThread.run(Unknown Source)
Caused by: org.apache.derby.client.am.DisconnectException: java.net.ConnectExcep
tion : Errore di connessione al server localhost sulla porta 1527 con messaggio
Connection refused: connect.
        at org.apache.derby.client.net.NetAgent.<init>(Unknown Source)
        at org.apache.derby.client.net.NetConnection.newAgent_(Unknown Source)
        at org.apache.derby.client.am.Connection.<init>(Unknown Source)
        at org.apache.derby.client.net.NetConnection.<init>(Unknown Source)
        at org.apache.derby.client.net.NetConnection40.<init>(Unknown Source)
        at org.apache.derby.client.net.ClientJDBCObjectFactoryImpl40.newNetConne
ction(Unknown Source)
        ... 42 more
Caused by: java.net.ConnectException: Connection refused: connect
        at java.net.DualStackPlainSocketImpl.connect0(Native Method)
        at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
        at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
        at java.net.PlainSocketImpl.connect(Unknown Source)
        at java.net.SocksSocketImpl.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.connect(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at java.net.Socket.<init>(Unknown Source)
        at javax.net.DefaultSocketFactory.createSocket(Unknown Source)
        at org.apache.derby.client.net.OpenSocketAction.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        ... 48 more

最佳答案

您的 jar 正在尝试连接到当前正在运行的计算机 (localhost) 上的数据库。当您将 jar 移至另一台计算机时,Derby 未在新计算机(现在是 localhost)上运行,并且您会收到连接错误。将配置或代码中的 Derby 主机名更改为运行 Derby 的计算机的名称。

Derby 文档在此处提供了有关在服务器模式下使用 Derby 的教程:http://db.apache.org/derby/papers/DerbyTut/ns_intro.html#ns_lookat_code 。它描述了为数据库设置协议(protocol) URL:

protocol = "jdbc:derby://localhost:1527/";

“localhost”是指当前运行该软件的计算机。无论您在何处定义此协议(protocol) URL,请将 localhost 设置为运行服务器的计算机的域名。

您还需要确保客户端/jar 计算机和数据库 (Derby) 服务器之间具有网络连接。如果它们都在同一网络上,您可能会这样做。

关于java - 可执行jar和数据库连接错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17503678/

相关文章:

jquery - 如何将隐藏/显示属性保存到数据库?

php - 如何将数组解析为 MYSQL IN()?

java - 公共(public) Java 类或 Jar

tomcat - Jars需要的文本文件放在tomcat服务器的什么地方?

java - 为什么继承每个类然后简单地创建派生类的单个对象来执行 oop 中的所有操作是一种不好的做法?

Java RSA/CBC加密实现

java - 从 XML 文件中提取一些节点

java - android字符串比较问题?

sql-server - 为什么使用 Entity Framework 创建 MSSQL(Express) 数据库这么慢?

java - 包结构的 jar 执行错误