的java mssql jdbc连接。exe不工作
所以我有一种情况,我在IDE中编译代码,当我运行它时,它可以正常工作。jar,它按预期工作,但当我创建。exe安装程序,并将其安装在应用程序停止的同一系统上,然后在下面的代码中尝试className
class GenerateImage {
private ResultSet rs;
private List<Row> rowData;
private Row r2;
Connection con;
private static final Shape circle = new Ellipse2D.Double(-3, -3, 6, 6);
public GenerateImage() throws IOException, SQLException, ParseException {
JOptionPane.showMessageDialog(null, "Inside");
Date startDate, endDate, currentDate, currentTime;
String date = "2018-07-29 00:00:00";
float minValue = 0;
float maxValue = 0;
String date_field = "CurDT";
String chartFilePath = "E:\\TrendChart.jpeg";
String pdfFilePath = "E:\\" + date.replaceAll(":", "_").replaceAll("-", "_") + "_TREND_report.pdf";
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
SimpleDateFormat timeFormat = new SimpleDateFormat("HH:mm");
String url = "jdbc:sqlserver://DESKTOP-DINSO\\DINSO:1433;databaseName=master;integratedSecurity=true";
JOptionPane.showMessageDialog(null, "step 1");
try {
JOptionPane.showMessageDialog(null, Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"));
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
JOptionPane.showMessageDialog(null, Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver"));
} catch (ClassNotFoundException ex) {
JOptionPane.showMessageDialog(null, "class not found");
Logger.getLogger(GenerateImage.class.getName()).log(Level.SEVERE, null, ex);
}
//JOptionPane.showMessageDialog(null, DriverManager.getConnection(url));
con = DriverManager.getConnection(url);
if (con == null) {
JOptionPane.showMessageDialog(null, "connection is null");
} else {
JOptionPane.showMessageDialog(null, "connection is not null");
}
TimeSeries value = new TimeSeries("value");
JOptionPane.showMessageDialog(null, "try started");
String sql;
// sql = "SELECT * FROM \"Sheet1$\" WHERE " + date_field +
">=" + startdate + " AND " + date_field + "<= " + enddate;
sql = "SELECT * FROM \"Sheet1\"";
Statement stmt = con.createStatement();
int count = 0;
ResultSet rs1 = stmt.executeQuery("SELECT COUNT(*) FROM \"Sheet1\"");
while (rs1.next()) {
count = rs1.getInt(1);
}
rs = stmt.executeQuery(sql);
if (rs == null) {
JOptionPane.showMessageDialog(null, "rs is null");
}
int sizeofRS = rs.getRow();
rowData = new ArrayList<Row>();
int i = 0;
System.out.println("size of rs is " + count);
for (int j = 0; j < count; j = j + 1) {
if (j < count) {
rs.next();
r2 = new Row(rs.getString(1), rs.getString(5));
rowData.add(r2);
currentDate = sdf.parse(rs.getString(1));
value.addOrUpdate(new Minute(currentDate),
Float.valueOf(rs.getString(5)));
System.out.println(" row data size " + rowData.size());
}
}
con.close();
JOptionPane.showMessageDialog(null, "sql connection closed");
System.out.println("Connection closed");
}
我还包括sqljdbc。项目配置中的dll目录
我添加了许多弹出窗口只是为了调试
此GenerateImage构造函数在main方法中调用
我的数据库类型是odbc
代码在IDE和jar格式中都可以正常工作。为什么这在打包时不起作用。exe并安装在同一系统上
我已经通过NetBeans使用了Inno native package manager
# 1 楼答案
好吧,这是我意识到的一个关键问题。 问题是jre中缺少文件“sqljdbc_auth.dll”。 因此,在打包应用程序时,请记住将文件复制到jre目录中,以便将其包含在包中
还有一种情况是,您已经把所有事情都做好了,但是应用程序也无法工作,因为客户端机器已经安装了一个jre,它不会丢失文件。因此,这里您必须再次复制该文件,或者要求客户端从系统中删除任何jre或jdk,因为应用程序将首先使用系统jre,然后首选打包的jre