几周前我提出了一个关于“如何将数据库嵌入到Java中”的问题。 感谢你,我成功地用 H2 db 做到了这一点。我制作了一个简单的应用程序,您可以在单击插入按钮时插入姓名,并在按下显示按钮时在 JTextArea 中显示姓名。在 Eclipse 中,当按下插入和显示按钮时,可以完美工作。 这是我的问题: 我导出项目,选择 Runnable JAR 文件等,当我从桌面启动应用程序并单击显示按钮时,数据库中的数据不会显示在 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();
}
}
}
我建议使用
jdbc:h2:~/data/databaseName
。这是相对于当前用户主目录的。或者使用 jdbc:h2:/data/databaseName
,这是绝对路径。
我建议避免使用
jdbc:h2:lib/database
形式的数据库 URL。在最新版本的 H2 中,这实际上不起作用并会抛出异常。数据库 URL 的含义是数据库文件存储在与进程的当前工作目录相对的目录
lib
中。当前工作目录“通常”是您启动应用程序的位置。如果您使用不同的应用程序(不在同一目录中),则使用此数据库 URL 最终会得到不同的数据库。