4

我的意思是我应该向最终用户提供哪些文件才能正确执行应用程序?

我可以仅使用同一文件夹中的myapp.jar&文件在我的开发系统上运行该应用程序。myapp.db但是当我尝试与朋友分享时,他无法加载数据库..

我应该将sqlite.dllorsqlite.exe文件也包含到应用程序目录中吗?

注意:数据库用于在运行时检索和存储数据。

编辑: 它是一个 SWING 应用程序,所以当数据库或其架构丢失时出现弹出错误。这是代码:

public boolean DBExists(Connection con,String dbName) {
  Statement stmt = null;
    ResultSet res = null;     
    try
  {
      String sql = "SELECT name FROM sqlite_master WHERE TYPE='table';";
      stmt = con.createStatement();
        res = stmt.executeQuery(sql);
  }
  catch(SQLException e)
  {
      System.out.println("Error creating or running SELECT statement: " + e.toString());
  }
    try {
      if (res.next()) {
          System.out.println("Database checked!");
          return true;
      } else {
          System.out.println("Database doesnt exist!");
          return false;
      }
    } catch (SQLException e) {
      System.out.println("Error processing results: " + e.toString());
    }
    System.out.println("Problem while checking database availability.");
    return false;
}

“数据库不存在!” 消息被触发。

编辑#2:

这也是调用 DBExist() 检查的连接方法:

public Connection DBConnect() {
    //STEP 1: Setup the Driver
    try
    {
        //Load the JDBC driver class dynamically.
        Driver d = (Driver)Class.forName(DRIVER).newInstance();
        DriverManager.registerDriver(d);
        System.out.println("Driver loaded successfuly!");
    }
    catch(Exception e)
    {
        System.out.println("Error loading database driver: " + e.toString());
        return null;
    }

    //STEP 2: Create connection to database using database URL
    Connection con;
    try
    {
        //FIXME: Load database filename via external config.
        con = DriverManager.getConnection(URL);
        System.out.println("Database connection successfull!");
        if (!DBExists(con,DB_NAME)) {
            JOptionPane.showMessageDialog(null,
                    "Database file was not found!",
                    "Database Fatal Error",
                    JOptionPane.ERROR_MESSAGE);
            System.exit(0);
        }
    }
    catch(SQLException e)
    {
        System.out.println("Error creating connection: " + e.toString());
        return null;
    }
    return con;          
}
4

1 回答 1

5

好吧,我的朋友是个白痴。该应用程序在两台不同的机器上运行起来就像一个魅力。

可能他一开始并没有将.db文件放在同一目录中,.jar而是单独运行创建了一个触发错误消息的空数据库模式。

因此,对于其他提出相同要求的人:

NO不需要包含sqlite.exesqlite.dll在发布使用 SQLite 数据库的桌面 JAVA 应用程序时。只需将JDBC 驱动程序与可运行文件打包,.jar应用程序就可以正常执行。

于 2013-05-29T11:01:48.277 回答