这是一个小程序,单击 GUI 中的按钮后会连接到 SQL Server 数据库,并检查连接是否正常。我的问题是:在 NetBeans IDE 中运行该程序时,它工作正常并且连接完成,没有任何问题,但是在构建该项目然后启动 jar 文件时,该程序无法连接,我已经检查了所有必要的内容:类路径、jdbc 驱动程序在那里(在 lib 目录中)等,也没有显示错误消息。
所有这些都在同一台本地计算机中。这是程序:
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
// TODO add your handling code here:
try {
String url = "jdbc:sqlserver://MY_PC\\MYSQLSRV;database=my_database";
String user="myuser";
String pass="mypass";
f = new JFrame();
Connection con = DriverManager.getConnection(url,user,pass);
if(con != null){
JOptionPane.showMessageDialog(f, "Connection etablie avec succes");
}
} catch (SQLException ex) {
//Logger.getLogger(AuthTest.class.getName()).log(Level.SEVERE, null, ex.getMessage());
JOptionPane.showMessageDialog(f, "Pas de connection");
}
}
听起来您的 JAR 在 NetBeans 外部运行时可能无法获取必要的 SQL Server JDBC 驱动程序。以下是一些有助于解决此问题的故障排除步骤:
确保 SQL Server JDBC 驱动程序 JAR 包含在打包的应用程序中。如果您的主 JAR 旁边有一个
lib
文件夹,请将驱动程序 JAR 放在那里。
运行 JAR 时,您可能需要显式设置类路径以包含驱动程序。例如,如果您的 JAR 是
myapp.jar
并且 JDBC 驱动程序位于 lib
目录中,您可以像这样运行它:
java -cp "myapp.jar;lib/*" com.yourpackage.MainClass
此命令包括主 JAR 和类路径上
lib
目录中的所有 JAR。
如果指定类路径不方便,请考虑将所有依赖项捆绑到一个“胖”JAR 中。如果您使用 Maven,则可以使用
maven-shade-plugin
来执行此操作,或者如果您使用 Gradle,请尝试使用 shadow
插件。
将此添加到您的
pom.xml
:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-shade-plugin</artifactId>
<version>3.2.4</version>
<executions>
<execution>
<phase>package</phase>
<goals>
<goal>shade</goal>
</goals>
</execution>
</executions>
</plugin>
</plugins>
</build>
这将创建一个包含所有依赖项的 JAR。
从命令行运行 JAR 以查看是否存在任何其他错误:
java -jar myapp.jar
有时,错误消息或异常会出现在控制台上,但不会出现在 GUI 对话框中,这可以提供更多信息。
确保 NetBeans 中的 Java 版本与您用于运行 JAR 的版本相匹配。 Java 版本不匹配有时会导致 JDBC 驱动程序出现意外行为。
希望这些解决方案之一能够解决该问题!如果您在从命令行运行时看到任何特定错误,请告诉我。