2014-06-02 2 views
1

Я использую h2 embedded db. Когда я запускаю свое приложение, db инициализируется, и я могу получить объект подключения. Однако, когда приложение пытается вставить данные в таблицу, он выдает исключение sql «таблица XXXX не найдена».Встроенная база данных h2: получение соединения, но таблица не найдена

Я могу просматривать таблицы из консолей H2. И тот же запрос выполняется отлично на консоли.

Пройдя некоторые ответы на другие вопросы по этой теме, я понял, что такое поведение происходит, когда база данных пуста. Но из консоли H2 я могу просматривать и выполнять запросы, и у меня есть кросс-проверка, это тот же самый дБ, потому что я использую тот же самый URL-адрес и пользователь для подключения как через приложение, так и через консоль H2.

Любые предложения по разрешению?

ответ

3

Все привилегии были на месте. Итак, одно было точно, что я действительно указывал на неправильный db. Но как я не знал. Затем я заметил, что когда я впервые запустил сервер приложений, созданный db-файл был расширением mv.db. Когда я впервые подключился через консоль h2, был создан файл с расширением h2.db. Итак, создавались две разные базы данных для одного и того же пользователя и URL-адреса.

Причина была в том, что h2-драйвер, который присутствовал в моем приложении, был версии 1.4 (бета), которая создает db с расширением mv.db. Консоль, к которой я обращалась, была через h2 версии 1.3 (последняя стабильная), которая создает файл h2.db.

Эта проблема возникла из-за несоответствия версии между приложением и консолью. Как только я переместил оба на 1.4 (бета), проблема была решена.

0

Моя ошибка заключалась в работе над двумя различными базами данных. H2 состоит из двух баз данных, только одна память (jdbc: h2: mem/...), а другая - постоянная (jdbc: h2: ~/...).

Кроме того, похоже, что база данных памяти зависит от сеанса. Это означает, что если вы подключаетесь к одному инструменту и создаете таблицу, то вы не найдете эту таблицу со своим сервером.

Смежные вопросы