H2: ошибка на всех других компьютерах - PullRequest
0 голосов
/ 11 января 2012

Я использую базу данных H2 в своем проекте Java (встроенный режим).На моем домашнем компьютере все работает, соединение может быть установлено, но на всех других компьютерах я всегда получаю следующую ошибку:

org.h2.jdbc.JdbcSQLException: Таблица "CUSTOMERS" not found;Оператор 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 ]

4 голосов
/ 11 января 2012

Проблема не в вашем соединении, поскольку вы получили бы исключение задолго до этого, если бы оно не могло подключиться к базе данных.Исключение также довольно ясно о том, в чем проблема - она ​​не может найти таблицу CUSTOMERS.Это может быть связано с тем, что таблица вообще не существует или соединение указывает на неправильную базу данных;попробуйте ввести полную информацию о схеме таблицы, а не только ее имя, и посмотрите, работает ли она.

3 голосов
/ 13 января 2012

Наконец-то я понял это!

Это не имело никакого отношения к моим таблицам, базу данных не удалось найти. При попытке подключиться к базе данных, которая не может быть найдена с помощью String dbDriver = "jdbc:h2:~/cc";, будет создана новая база данных с именем cc (в моем случае) (конечно, пустая без таблиц) и соединение установлено. Вот почему я не получил никаких ошибок подключения.
На следующем шаге я попытался извлечь некоторые данные из новой созданной пустой базы данных и поэтому получил ошибку, что моя таблица не существует.

Поэтому я изменил эту строку: String dbDriver = "jdbc:h2:file:lib/cc"; и скопировал в каталог lib моего приложения мою старую базу данных cc.h2.db .

Вот и все!

PS: похожая проблема: h2 (встроенный режим) проблема с файлами базы данных

3 голосов
/ 11 января 2012

Я уверен, что внутри БД все в порядке, должно быть что-то со связью.Но даже если я импортирую файл h2-1.3.162.jar, ошибка все равно останется.

Проверьте свои предположения.Это неверно.

В сообщении нет ничего, что указывало бы на невозможность подключения.Либо вы подключились к неверной базе данных, либо к той, к которой вы подключились, НЕ СОЗДАЛИ КЛИЕНТОВ.(Должен называться CUSTOMER, а не во множественном числе.)

Вы исправите свою ошибку быстрее, если перестанете считать, что все, что вы сделали, правильно.Вы должны предполагать, что все не так.

Я бы напечатал трассировку стека, когда вы поймете это исключение.Это даст вам больше информации.

...