我的意思是我应该向最终用户提供哪些文件来正确执行应用程序?
我只能使用myapp.jar
&运行我的开发系统上的应用程序myapp.db
个文件位于同一文件夹中。但是当我试图与朋友分享时,他无法加载数据库..
我是否应该将sqlite.dll
或sqlite.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;
}
答案 0 :(得分:3)
好的,我的朋友是个白痴..该应用程序在两台不同的机器上运行就像一个魅力。
可能他没有将.db
文件放在同一个目录中,并且单独运行.jar
就创建了一个空数据库模式,触发了错误消息。
所以对于其他人也一样:
否在使用SQLite数据库发布桌面JAVA应用时,无需包含sqlite.exe
或sqlite.dll
。只需使用runnable .jar
打包 JDBC驱动程序,即可正常运行。