2013-03-14 3 views
2

Я пытаюсь загрузить драйвер JDBC, чтобы сделать некоторые вызовы SQL для моего AS400. Я попытался запустить соединение на компьютере, на котором установлен JDBC, и ссылки на URL и SQL работают нормально.не может загрузить драйвер jdbc (ClassNotFoundException)

Мне нужно разработать приложение (в настоящее время для Android, хотя мы ищем расширение на настольное приложение), в котором нет установленных драйверов. Я тестирую код на реальном устройстве Android, а не на эмуляторе, поэтому у него есть полные разрешения для Интернета.

У jt400 есть драйверы, которые находятся в com.ibm.as400.access.AS400JDBCDriver как noted by IBM.

Это мой код:

try { 

     Class.forName("com.ibm.as400.access.AS400JDBCDriver").newInstance(); 
     Connection conn = DriverManager.getConnection(
       url + schema + ";naming=sql;errors=full", 
       uname, 
       psswrd); 

     // do SQL query stuff 

     rs.close(); 
     stmt.close(); 
     conn.close(); 

    } 
    catch (ClassNotFoundException e) 
    { 
     this.basicOutput.setText("Class not found: " + e.getMessage()); 
     System.out.println(e.getStackTrace()); 
    } 
    //catch (SQLException e) 
    catch (Exception e) //need generic to catch all errors thrown 
    { 

     this.basicOutput.setText(e.getMessage()); 
     System.out.println(e.getStackTrace()); 

    } 

я получаю "класс не найден: com.ibm.as400.access.AS400JDBCDriver", когда я запускаю это.

Я провел некоторое исследование, и это говорит о том, что Class.forName не является хорошим способом. Поэтому я также пробовал это:

 DriverManager.registerDriver(new com.ibm.as400.access.AS400JDBCDriver()); 

Но это также дает ту же ошибку.

Класс есть. Скомпилированный код не выдает никаких синтаксических ошибок, но по какой-то причине среда выполнения не может ее найти.

Что мне не хватает?

+1

JDBC - это не то, что установлено. Драйвер jdbc - это класс, который взаимодействует с вашей базой данных. Вы должны иметь этот класс (обычно в файле .jar) в вашем пути к классу при запуске приложения. –

+0

Я вижу. Есть ли способ включить его или загрузить его из .jar, который включен в проект, а не в путь к классам? – Sammy

+0

Вы включаете 'jar' в свой проект в папке libs, а затем добавляете эту папку libs в путь сборки. Выполните следующие шаги: http://stackoverflow.com/questions/1334802/how-can-i-use-external-jars-in-an-android-project –

ответ

0

Водитель должен быть включен в качестве фляги в вашем проекте. Если у вас уже есть это, добавьте его в свой проект в папку/libs.

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

+0

Ящик включен в мои библиотеки проектов. Я попробовал это, включив его только в справочную библиотеку, а также в папку/libs. Он все еще не может его найти. – Sammy

0

Посмотрите на мой ответ на этот question

классов в библиотеке JTopen Lite предназначен для использования на Android.

+0

Большое спасибо за документацию! Я переключил драйверы на «com.ibm.jtopenlite.database.jdbc.JDBCDriver», который загружается. Однако я получаю исключение «java.net.SockettimeOutException: Connection timed out». Я знаю, что этот URL-адрес работал, потому что я использовал его в моем подключении IBS Integrator (и при тестировании его в J2SE). Это локальный IP-адрес, так как этот сервер ничего не говорит за пределами сети, если вы не удаляетесь в VPN. Я использую внутреннее беспроводное соединение, а не 3G. Может ли это испортить мое соединение? – Sammy

+0

Это исключение немного сложно отлаживать, не видя всей вашей программы. Я бы предложил разработать тестовую программу на ПК, который, как вы знаете, вы можете подключить с/к вашей БД. Это поможет сгладить детали относительно того, является ли это проблемой URL или иным образом. – packersfan16

+0

URL-адрес работает отлично, используя программу java для рабочего стола. Возможно, я могу как-то отправить вам свой код. Пока еще немного. – Sammy

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