Пользователю UCanAccess не хватает привилегий или ошибка объекта не найдена при открытии базы данных

У меня есть программа Java, которую нужно извлечь из базы данных Microsoft Access. Недавно мне пришлось изменить код для использования UCanAccess вместо ODBC, поскольку мост JDBC-ODBC не поддерживается в Java SE 8 (Управление базой данных Access из Java без ODBC)

Когда я запускаю код, показанный ниже (только пример кода, приведенный на веб-сайте UCanAccess), я получаю сообщение об ошибке:

ERROR: net.ucanaccess.jdbc.UcanaccessSQLException: user lacks privilege or object not found: NULL

Код выглядит следующим образом

Connection conn=DriverManager.getConnection("jdbc:ucanaccess://Z:\\Assignment.accdb");
Statement s = conn.createStatement();
ResultSet rs = s.executeQuery("SELECT * FROM tbl2014janjun"); //tbl2014janjun ORDER BY ID
while (rs.next()) {
    System.out.println(rs.getString(1));
}

Во время тестирования я заметил, что этот код может получить доступ к отдельной базе данных Work Order, и результат соответствует ожидаемому. Кроме того, всякий раз, когда этот код пытается запуститься, он создает блокирующий файл laccdb в каталоге сервера. Из-за этого я считаю, что проблема заключается в привилегиях пользователя. При поиске возможных ответов на этом сайте большинство из них относилось ко второй половине сообщения об ошибке - в таблице была написана ошибка и т. д. Я убедился, что орфография/расположение/структура файла верны.

Спасибо за любую помощь, которую вы можете предоставить.


person user3656992    schedule 29.12.2014    source источник
comment
Я никогда не использовал UCan.. но я думаю, что ваша первая подсказка находится в конце сообщения, где написано «Null» — как будто чего-то не хватает. Затем, если вы посмотрите на путь к вашей базе данных, вы уверены, что //Z:\\Assignment.accdb правильно разрешается? Это правильный путь? В качестве теста, почему бы не полностью указать путь (при условии, что ваш «\\» преднамеренный). Поскольку вы получаете файл LDB, ваши разрешения могут быть в порядке.   -  person Wayne G. Dunn    schedule 30.12.2014
comment
Я уверен, что путь разрешается правильно. Чтобы уточнить, доступная база данных находится в том же каталоге, и я получаю правильный вывод. Однако простое изменение имени файла на Assignment создает описанную выше проблему. Насколько я могу судить, между двумя базами данных нет заметных различий.   -  person user3656992    schedule 30.12.2014
comment
Можете ли вы опубликовать тот же код для работающей БД? Если вы можете получить доступ к другой базе данных в той же папке, я бы сравнил все разрешения между двумя базами данных (не нужно проверять права доступа к папке).   -  person Wayne G. Dunn    schedule 30.12.2014
comment
Проблема может возникнуть во время подключения, поэтому ваш отчет может быть неполным. Пожалуйста, добавьте трассировку стека исключений.   -  person jamadei    schedule 30.12.2014
comment
Извините, вчера на моем рабочем месте отключился интернет. Я считаю, что проблема заключается в правах доступа к базе данных, так как я могу получить доступ к другим базам данных в том же каталоге. Я попытаюсь исправить проблему, используя эту информацию, и, возможно, задам новый, более конкретный вопрос, если я все еще не могу найти ответ. Спасибо за вашу помощь.   -  person user3656992    schedule 31.12.2014
comment
Дистрибутив UCanAccess содержит утилиты console.bat для Windows и console.sh для Linux (и др.). Они запросят у вас расположение файла базы данных, а затем просканируют его, открыв каждую таблицу/запрос и сообщив обо всех обнаруженных ошибках. Попробуйте это и посмотрите, даст ли это вам дополнительные подсказки относительно причины вашей трудности.   -  person Gord Thompson    schedule 07.01.2015
comment
Спасибо, что сообщили мне об утилите console.bat. После просмотра ошибки кажется, что соединение не загружает таблицы, а как-то загружает соответствующие индексы. Я не уверен, почему это может быть так. Я могу опубликовать результаты, но они не говорят мне намного больше, чем это.   -  person user3656992    schedule 07.01.2015
comment
В качестве своего рода окончательного обновления мне в конце концов пришлось просто вернуться к Java 7 и повторно использовать старый код. По какой-то причине он может нормально обращаться к Assignment.accdb.   -  person user3656992    schedule 09.01.2015


Ответы (1)


У меня была точно такая же проблема после перехода с Tomcat 6 на 7. Две базы данных в одном месте с одинаковыми таблицами и столбцами, просто данные разные (разные проекты). Один работал нормально, другой выдавал вышеупомянутую ошибку.

Исправил это, выполнив операцию «Сжать и восстановить базу данных» из приложения Windows Access. (В Access 2007 это Manage > Repair из раскрывающегося списка основной панели инструментов.)

person mljm    schedule 03.08.2015