2014-01-22 2 views
2

У меня есть программа в Netbeans, которая использует SQL для подключения к базе данных Access. Я готов завершить работу и сделать файл jar из программы, но когда я буду «строить и чистить», а затем попытаюсь запустить программу в команде, я получаю:Создание файла jar, содержащего команды SQL в Netbeans

java.sql.SQLException: [Microsoft] [ODBC Driver Manager] источник данных не найден и драйвер по умолчанию не указано

В моем коде я получить доступ к базе данных непосредственно с помощью:

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); 
Connection con = DriverManager.getConnection("jdbc:odbc:Driver={Microsoft Access Driver (*.mdb, *.accdb)};Dbq=C:\\Users\\d9t\\Desktop\\Resource_DB.accdb"); 
+0

Как вы используете программу? Вы запускаете его в среде IDE или используете его из командной строки? – bdrx

+0

Когда я запускаю его из IDE, программа работает так, как должна, но как только я делаю банку и пытаюсь запустить ее в командной строке, я получаю выше Ошибка – Hughes

ответ

0

Я наткнулся на это исправить http://ucanaccess.sourceforge.net/site.html

Установите UCanAccess-2,0 .1-bin.zip и включить все файлы. Я столкнулся некоторые незначительные ошибки, такие, как не в состоянии передать "и" в Access, но он успешно позволяет 64-битные компьютеры для подключения 32-битный доступа.

Надеется, что это поможет вам доступ программистов!

+1

Спасибо за обновление. Просто поясните: UCanAccess использует Jackcess для чтения/записи файла базы данных Access (.accdb или .mdb) напрямую, минуя любую версию механизма базы данных доступа, которая может быть установлена ​​на компьютере. Таким образом, на самом деле компьютер не подключается к 32-разрядному (или 64-разрядному) доступу », это просто чтение и запись файла. –

0

я не сделал этого (JDBC-ODBC) на протяжении многих лет, но Я думаю, что в дополнение к тому, что вы сделали, вам также необходимо добавить источник данных следующим образом: http://msdn.microsoft.com/en-us/library/ca6axakh(v=vs.80).aspx

+2

У меня создалось впечатление, что пока я использую сервер без DNS, мне не нужно настраивать соединение в ODBC. Я могу заставить его работать в Netbeans, не создавая этого соединения. эта ошибка, как только я сделаю и запустил файл jar. – Hughes

0

Похоже, что при запуске программы может потребоваться добавить к пути к классу путь к вашему пути. Запустите программу указав путь к классам (-classpath или -cp)

java -classpath driver.jar;myprogram.jar my.package.MainClass 

где my.package.MainClass если класс вы хотите запустить

+0

Запуск: "java -C: \ Users \ d9t \ Documents \ NetBeansProjects \ Resource Tool \ dist driver.jar; Resource_Tool.jar ResourceToolGUI.Resource_Tool_Project.MainClass" Правильно ли это выглядит? – Hughes

+0

вам нужен java -cp «C: \ Users \ d9t \ Documents \ NetBeansProjects \ Resource Tool \ dist \ driver.jar; C: \ Users \ d9t \ Documents \ NetBeansProjects \ Resource Tool \ dist \ Resource_Tool.jar" ResourceToolGUI.Resource_Tool_Project .MainClass – bdrx

+1

Это приложение использует мост JDBC-ODBC, поэтому никакой другой драйвер не требуется на стороне Java. (Драйвер ODBC Microsoft Access должен быть установлен в Windows, но это, очевидно, было сделано, потому что приложение работает корректно из среды IDE.) –

0

Я просто попытался воссоздать проблему с помощью 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, а затем выход.)

+0

Вы были правы, мне пришлось переключить мою IDE на 32-разрядную, чтобы подключить Java и Access , В банке работает 32bit, но Command работает с 64-битной средой. Мне придется экспортировать это на другой 64-битный компьютер в будущем. Есть ли способ сохранить файл как 32 бит, чтобы он работал с Access и запускал его в 64-битной среде? – Hughes

+0

@Crash Я обновил свой ответ. –

+0

Гордон Томпсон благодарит вас, вы оказали огромную помощь. Чтобы уточнить, нет возможности подключить 32-разрядный доступ и Java, а затем запустить его на 64-битной JVM. Если бы я хотел иметь возможность запускать это подключение к базе данных, мне пришлось бы проверять каждую машину на ее версию JVM и устанавливать 32-битную, если она еще не существует. – Hughes

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