h2如何在Java中导出数据库应用程序以正常工作
几周前,我提出了一个关于“如何将数据库嵌入Java”的问题。 多亏了你,我用H2 db成功地做到了这一点。我制作了一个简单的应用程序,当点击insert按钮时插入姓名,当按下show按钮时在JText区域中显示姓名。在Eclipse中,当按下insert和show按钮时,可以完美地工作。 我的问题是: 我导出项目,选择Runnable JAR file等。当我从桌面启动应用程序并单击show按钮时,数据库中的数据不会显示在JTextArea上。 为什么会这样? 以下是部分代码:
static final String driver = "org.h2.Driver";
static final String DB_URL = "jdbc:h2:lib/database";
Connection conn = null;
public void sql(){
try{
Class.forName(driver);
System.out.println("Connect to my database");
conn = DriverManager.getConnection(DB_URL, "root", "#mysql");
System.out.println("Is connect");
}catch(SQLException sql){
sql.printStackTrace();
}catch(Exception e){
e.printStackTrace();
}
}
class insertClass implements ActionListener{
public void actionPerformed(ActionEvent ev){
try{
String update = "INSERT INTO bazadedate.persoane(Name, Surname) values('"+ne.getText()+"', '"+se.getText()+"')";
Statement st;
st = conn.createStatement();
st.executeUpdate(update);
}catch(SQLException s){
s.printStackTrace();
}
}
}
class showClass implements ActionListener{
String name, surname;
public void actionPerformed(ActionEvent ev){
try{
String show = "SELECT * FROM bazadedate.persoane";
Statement st;
ResultSet rs;
st = conn.createStatement();
rs = st.executeQuery(show);
while(rs.next()){
name = rs.getString("Name");
surname = rs.getString("Surname");
text.append(name + " " + surname + "\n");
}
}catch(SQLException s){
s.printStackTrace();
}
}
}
# 1 楼答案
我建议使用
jdbc:h2:~/data/databaseName
。这是相对于当前用户主目录的。或者使用jdbc:h2:/data/databaseName
,这是一个绝对路径我建议避免使用
jdbc:h2:lib/database
形式的数据库URL。在最新版本的H2中,这实际上不起作用,并引发异常。数据库URL的意思是数据库文件存储在相对于进程当前工作目录的目录lib
中。当前工作目录通常是启动应用程序的位置。如果您使用不同的应用程序(不在同一目录中),那么使用此数据库URL,您将得到不同的数据库