如何使用SQLite数据库发布JAVA桌面应用程序

时间:2013-05-29 01:03:24

标签: java database sqlite desktop-application publishing

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

我只能使用myapp.jar&运行我的开发系统上的应用程序myapp.db个文件位于同一文件夹中。但是当我试图与朋友分享时,他无法加载数据库..

我是否应该将sqlite.dllsqlite.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;          
}

1 个答案:

答案 0 :(得分:3)

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

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

所以对于其他人也一样:

在使用SQLite数据库发布桌面JAVA应用时,无需包含sqlite.exesqlite.dll。只需使用runnable .jar打包 JDBC驱动程序,即可正常运行。