Я просто попытался воссоздать проблему с помощью NetBeans 7.4 и был безуспешными. Мой проект правильно побежал в среде IDE NetBeans, и после выполнения «Очистить и построить» также успешно бежал из командной строки с помощью
java -jar AccessTest.jar
Для диагностических целей, пожалуйста, попробуйте следующее:
Добавьте следующие два строк кода, как первые строки в вашем методе main
:
System.out.println(System.getProperty("sun.arch.data.model"));
System.exit(0);
запустить свой код в IDE и обратите внимание на номер, который он печатает на консоль. (Это будет либо «32», либо «64».)
Затем перестройте проект и запустите файл .jar
из командной строки. Означает ли это то же значение, когда вы запускаете его таким образом?
Edit повторно: комментарий
Выход из вышеуказанных диагностики подтвердили проблему. 32-разрядная версия механизма базы данных доступа (a.k.a. «ACE») была установлена на компьютере, а для конфигурации NetBeans было установлено, что приложение запускается в 32-разрядной JVM из самого NetBeans, так что это нормально. Однако, когда файл .jar был запущен из командной строки, он работал в 64-разрядной JVM, поэтому драйвер ODBC Access не был доступен.
Ключевым моментом здесь является то, что «битность» установленного ACE-драйвера должна соответствовать «битности» JVM, под которой работает Java-приложение. Это не совсем то, что вы, как разработчик, можете контролировать. Даже если вы должны были использовать тест System.getProperty
для определения «битности», при которой приложение работает, вы не можете гарантировать, что будет установлен соответствующий драйвер ACE.
Что вы могли сделать, это построить приложение, чтобы использовать более старую 32-разрядный драйвер «Jet» ...
{Microsoft Access Driver (*.mdb)}
... потому что на всех машинах Windows.Ваш файл базы данных должен будет использовать более старый формат файла .mdb
(потому что Jet не может читать файлы .accdb
), и вы можете использовать тест System.getProperty
, чтобы убедиться, что приложение работает под 32-разрядной JVM. (То есть, если вызов возвращается «64» просто сказать пользователю, что они должны запустить приложение под 32-разрядной JVM, а затем выход.)
Как вы используете программу? Вы запускаете его в среде IDE или используете его из командной строки? – bdrx
Когда я запускаю его из IDE, программа работает так, как должна, но как только я делаю банку и пытаюсь запустить ее в командной строке, я получаю выше Ошибка – Hughes