有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

的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) 个答案

  1. # 1 楼答案

    好吧,这是我意识到的一个关键问题。 问题是jre中缺少文件“sqljdbc_auth.dll”。 因此,在打包应用程序时,请记住将文件复制到jre目录中,以便将其包含在包中

    还有一种情况是,您已经把所有事情都做好了,但是应用程序也无法工作,因为客户端机器已经安装了一个jre,它不会丢失文件。因此,这里您必须再次复制该文件,或者要求客户端从系统中删除任何jre或jdk,因为应用程序将首先使用系统jre,然后首选打包的jre