【发布时间】:2011-07-13 14:05:44
【问题描述】:
我正在用java编写一个桌面应用程序来添加/显示员工。我想到了使用hsqldb。我创建了如下程序
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HSQLDBManualOp {
/**
* @param args
*/
public static void main(String[] args) {
Connection connection = null;
ResultSet resultSet = null;
Statement statement = null;
String createtablestr = "CREATE TABLE employeedetails (EMPNAME varchar(20));";
String insertstr1 = "INSERT INTO employeedetails (EMPNAME) VALUES ('EMPNAME1')";
String insertstr2 = "INSERT INTO employeedetails (EMPNAME) VALUES ('EMPNAME2')";
String insertstr3 = "INSERT INTO employeedetails (EMPNAME) VALUES ('EMPNAME3')";
try {
Class.forName("org.hsqldb.jdbcDriver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
try {
connection = DriverManager.getConnection("jdbc:hsqldb:file:C:/code/java/march112011aDB", "SA", "");
} catch (SQLException e) {
e.printStackTrace();
}
if (connection == null){
System.out.println(" connection null");
return;
}
try {
statement = connection.createStatement();
statement.executeUpdate(createtablestr);
statement.executeUpdate(insertstr1);
statement.executeUpdate(insertstr2);
statement.executeUpdate(insertstr3);
resultSet = statement.executeQuery("SELECT EMPNAME FROM EMPLOYEEDETAILS");
} catch (SQLException e) {
e.printStackTrace();
}
try {
while (resultSet.next()) {
System.out.println("EMPLOYEE NAME:" + resultSet.getString("EMPNAME"));
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}
当我运行程序时,我得到了输出
EMPLOYEE NAME:EMPNAME1
EMPLOYEE NAME:EMPNAME2
EMPLOYEE NAME:EMPNAME3
然后我将插入语句更改为添加 EMPNAME4,EMPNAME5,EMPNAME6
我预计它会打印员工 1,2,3,4,5,6 但是当我运行代码时,我只得到了新值。
EMPLOYEE NAME:EMPNAME4
EMPLOYEE NAME:EMPNAME5
EMPLOYEE NAME:EMPNAME6
使用 jdbc:hsqldb:file 时是否无法保留这些值? 我还想检查表是否已经存在。只有在表不存在时才执行创建表语句。谁能告诉我该怎么做?
或者我必须使用服务器模式吗?如果是,我如何从程序中创建数据库?
请帮忙..这是我第一次尝试 jdbc/hsqldb..
谢谢,
标记
【问题讨论】:
-
我认为默认情况下 hsqldb 在每次运行时都会重新初始化数据库。如果不是这样,我认为您仍然不会得到预期的结果。在第二次运行时,员工表的创建将失败。见stackoverflow.com/questions/3551988/…
-
另外,您应该考虑关闭 ResultSet、Statement 和连接对象,最好在 finally 块中。我不认为这会治愈你的问题,但它不会伤害它。