H2:所有其他计算机出错

时间:2012-01-11 11:28:42

标签: java database-connection h2

我在我的Java项目(嵌入模式)中使用H2数据库。 在家里的计算机上一切正常,可以建立连接,但在所有其他计算机上我总是收到以下错误:

  

org.h2.jdbc.JdbcSQLException:找不到表“CUSTOMERS”; SQL   声明:SELECT * FROM CUSTOMERS [42102-162]

我敢肯定,在数据库中一切都没问题,它应该是连接的东西。 但即使我导入h2-1.3.162.jar文件,错误仍然存​​在。

String dbClass = "org.h2.Driver";
String dbDriver = "jdbc:h2:~/cc";
String user = "user1";
String pass = "test1";
private Connection conn = null;
private Statement stmt = null;
private ResultSet rs = null;

public void connect() {
    boolean done = false;
    //load driver
    try {
        Class.forName(dbClass).newInstance();
        System.out.println("driver loaded"); // This is shown in the Compiler
    } catch (Exception ex) {
        System.out.println("error while loading driver");
        System.err.println(ex);
    }
    // Connection
    try {
        conn = DriverManager.getConnection(dbDriver, user, pass);
        System.out.println("connected"); // This is shown in the Compiler
        done = true;
    } catch (SQLException ex) {
        System.out.println("SQLException: " + ex.getMessage());
        System.out.println("SQLState: " + ex.getSQLState());
        System.out.println("VendorError: " + ex.getErrorCode());
    }
}

public Vector select() {
    data = new Vector();
    try {
        stmt = conn.createStatement();
        rs = stmt.executeQuery("SELECT * FROM CUSTOMERS");
        while (rs.next()) {
            Vector row = new Vector();
            row.add(rs.getInt("id"));
            row.add(rs.getString("fname"));
            row.add(rs.getString("lname"));
            row.add(rs.getString("street"));
            row.add(rs.getString("city"));
            row.add(rs.getString("zip"));
            row.add(rs.getString("state"));
            row.add(rs.getString("phone"));
            row.add(rs.getString("birthday"));
            row.add(rs.getString("email"));
            row.add(rs.getInt("code"));
            data.add(row);
        }
        rs.close();
        stmt.close();
    } catch (SQLException ex) {
        System.out.println("error while selecting"); // I receive this error
        System.err.println(ex);
    }
    return data;
}

3 个答案:

答案 0 :(得分:4)

问题不在于您的连接,因为如果它未能连接到数据库,您将在此之前收到异常。关于问题的例外是非常清楚的 - 它找不到CUSTOMERS表。这可能是因为表根本不存在,或者连接指向错误的数据库;尝试输入表的完整架构信息,而不仅仅是它的名称,看看是否有效。

答案 1 :(得分:3)

  

我敢肯定,在数据库中,一切都没问题,应该是   连接的东西。但即使我导入h2-1.3.162.jar   文件,错误仍然存​​在。

检查您的假设。这个是不正确的。

消息中没有任何内容表明您无法连接。您连接到错误的数据库或您连接到的数据库没有创建表CUSTOMERS。 (应该命名为CUSTOMER,而不是复数。)

如果您停止假设您所做的一切都是正确的,那么您将更快地修复错误。你应该假设一切都是错的。

当你捕获到那个异常时,我会打印堆栈跟踪。它会为您提供更多信息。

答案 2 :(得分:3)

最后我明白了!

它与我的表无关,无法找到数据库。当尝试连接到String dbDriver = "jdbc:h2:~/cc";无法找到的数据库时,将创建一个名为 cc 的新数据库(在我的情况下)(当然是空的,没有表)并建立连接。这就是我没有收到任何连接错误的原因 在下一步中,我尝试从新创建的空数据库中检索一些数据,因此收到错误,我的表不存在。

所以我更改了这一行:String dbDriver = "jdbc:h2:file:lib/cc";并将其复制到我的应用程序的 lib 目录中我的旧数据库 cc.h2.db

这就是全部!

PS:这是一个类似的问题:h2 (embedded mode ) database files problem