Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Извечная проблема с jdbc


Автор: DEER 19.9.2006, 17:41
Народ в поиск не посылайте, потому как уже поискал..
конкретного ответа так и не нашел.

Короче СУБД - PostgreSQL 8.1

где то на винграде (ссылку потерял) нашел официальный сайт разработчиков JDBC драйвера для него,
зашел скачал postgresql-8.1-407.jdbc2ee.jar (там для этой версии было неск типов драйверов - выбрал 2 ee)

короче в classpath и в path(на всякий пожарный) прописал и папку где лежит jar и путь к самому jar'у.

пишу в IDEA,
в проекте в Libraries прописал путь к этому jar'у
в проекте класс
Код

package w;
import java.sql.DriverManager;
import java.util.Enumeration;

public class q
{
public static void main(String [] args)
{
       try
       {
           Class.forName("org.postgresql.Driver").newInstance();
           for(Enumeration e = DriverManager.getDrivers(); e.hasMoreElements();)
            System.out.print(e.nextElement().getClass());
       }
       catch(Exception ee)
       {
           System.out.print(ee.toString());
       }
    
}
}


запускаю Run всё выводит нормально.
Если удалить из проекта ссылку на jar. то пишет
Цитата

java.lang.ClassNotFoundException: org.postgresql.Driver


пытался запустить из под командной строки, зашел в папку untitled2/classes/ пишу 
Цитата

C:\untitled2\classes>java w.q
Exception in thread "main" java.lang.NoClassDefFoundError: w/q

те не могу проверить пойдет оно или нет...


Но это всё эксперименты..
Для дела мне нужно создать веб приложение работающее с БД.
Создал веб-приложение, добавил в Libraries ссылку на jar.
Написал там такой же тег-класс, только выводящий текс на страницу.
Код

   public int doStartTag() throws JspException
   {
       try
       {
           pageContext.getOut().print("соединяюсь с БД....<br/>");
           Class.forName("org.postgresql.Driver");
           for(Enumeration e = DriverManager.getDrivers(); e.hasMoreElements();)
            pageContext.getOut().print(e.nextElement().getClass());
       }
       catch(Exception exc)
       {
           try
           {
           pageContext.getOut().println(exc.toString()+"<br/>");
           }
           catch(Exception excc)
           {
               excc.printStackTrace();
           }
           exc.printStackTrace();
       }

       

       return SKIP_BODY;
   }


сделал jsp и тп.
Выложил проект на Томкат.
Пытаюсь запустить
пишет
Цитата

соединяюсь с БД....
java.lang.ClassNotFoundException: org.postgresql.Driver

не находит он драйвер.... 
в тег-классе могу сделать 
Код

import org.postgresql.Driver;


что ещё можно сделать, чтобы этот драйвер стал виден? Уже голова кипит....
вот переменная CLASSPATH
Цитата

c:\Java\libs\;c:\Java\libs\postgresql-8.1-407.jdbc2ee.jar;c:\Java\lib\

вот переменная Path
Цитата

%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;c:\Java\ant\bin\;C:\Program Files\Subversion\bin;c:\Java\libs\;c:\Java\lib\

Автор: Sleepy_PIP 19.9.2006, 17:59
c:\Java\libs\;c:\Java\libs\postgresql-8.1-407.jdbc2ee.jar;c:\Java\lib\
добавь еще .; т.е.
.;c:\Java\libs\;c:\Java\libs\postgresql-8.1-407.jdbc2ee.jar;c:\Java\lib\


C:\untitled2\classes>java w.q
не понял что ты этим хочешь сказать - тебе надо запускать ф. с расширением .class.

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

Автор: Stampede 19.9.2006, 18:14
Цитата(DEER @  19.9.2006,  08:41 Найти цитируемый пост)
Для дела мне нужно создать веб приложение работающее с БД.


Если это веб приложение, то проще всего положить jar с драйвером в папку WEB-INF/lib. Там загрузчик классов контейнера найдет его автоматически, без явного прописывания пути к файлу.

Автор: DEER 19.9.2006, 18:17
Цитата(Sleepy_PIP)

c:\Java\libs\;c:\Java\libs\postgresql-8.1-407.jdbc2ee.jar;c:\Java\lib\
добавь еще .; т.е.
.;c:\Java\libs\;c:\Java\libs\postgresql-8.1-407.jdbc2ee.jar;c:\Java\lib\

добавил... не ожило...
Цитата(Sleepy_PIP)

C:\untitled2\classes>java w.q
не понял что ты этим хочешь сказать - тебе надо запускать ф. с расширением .class.

запускаю класс q из пакаджа w скомпилированный в IDEA.
Цитата(Sleepy_PIP)

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


мне не помогло
Цитата

"C:\Java\IntelliJ IDEA 5.1\jre\bin\java" -Didea.launcher.port=7533 "-Didea.launcher.bin.path=C:\Java\IntelliJ IDEA 5.1\bin" -Dfile.encoding=windows-1251 -classpath "C:\Java\IntelliJ IDEA 5.1\jre\lib\charsets.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\deploy.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\javaws.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\jce.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\jsse.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\plugin.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\rt.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\tools.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\ext\dnsns.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\ext\localedata.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\ext\sunjce_provider.jar;C:\Java\IntelliJ IDEA 5.1\jre\lib\ext\sunpkcs11.jar;C:\Java\IntelliJ IDEA 5.1\lib\alloy.jar;C:\Java\IntelliJ IDEA 5.1\lib\annotations.jar;C:\Java\IntelliJ IDEA 5.1\lib\bcel.jar;C:\Java\IntelliJ IDEA 5.1\lib\boot.jar;C:\Java\IntelliJ IDEA 5.1\lib\commons-collections.jar;C:\Java\IntelliJ IDEA 5.1\lib\extensions.jar;C:\Java\IntelliJ IDEA 5.1\lib\forms_rt.jar;C:\Java\IntelliJ IDEA 5.1\lib\icons.jar;C:\Java\IntelliJ IDEA 5.1\lib\idea_rt.jar;C:\Java\IntelliJ IDEA 5.1\lib\jasper2_rt.jar;C:\Java\IntelliJ IDEA 5.1\lib\jaxen.jar;C:\Java\IntelliJ IDEA 5.1\lib\jdom.jar;C:\Java\IntelliJ IDEA 5.1\lib\jh.jar;C:\Java\IntelliJ IDEA 5.1\lib\JNIWrap.jar;C:\Java\IntelliJ IDEA 5.1\lib\jsp-api.jar;C:\Java\IntelliJ IDEA 5.1\lib\junit.jar;C:\Java\IntelliJ IDEA 5.1\lib\log4j.jar;C:\Java\IntelliJ IDEA 5.1\lib\openapi.jar;C:\Java\IntelliJ IDEA 5.1\lib\oromatcher.jar;C:\Java\IntelliJ IDEA 5.1\lib\picocontainer.jar;C:\Java\IntelliJ IDEA 5.1\lib\resources.jar;C:\Java\IntelliJ IDEA 5.1\lib\resources_en.jar;C:\Java\IntelliJ IDEA 5.1\lib\resources_jp.jar;C:\Java\IntelliJ IDEA 5.1\lib\saxpath.jar;C:\Java\IntelliJ IDEA 5.1\lib\servlet-api.jar;C:\Java\IntelliJ IDEA 5.1\lib\trove4j.jar;C:\Java\IntelliJ IDEA 5.1\lib\trove4j_src.jar;C:\Java\IntelliJ IDEA 5.1\lib\velocity.jar;C:\Java\IntelliJ IDEA 5.1\lib\xerces.jar;C:\Java\IntelliJ IDEA 5.1\lib\xml-apis.jar;C:\Java\IntelliJ IDEA 5.1\lib\xmlrpc-1.1.jar;C:\Java\IntelliJ IDEA 5.1\lib\xstream.jar;C:\Java\IntelliJ IDEA 5.1\lib\yjp-controller-api-redist.jar;C:\Documents and Settings\OlegM\IdeaProjects\untitled2\classes;C:\Java\libs\postgresql-8.1-407.jdbc2ee.jar" com.intellij.rt.execution.application.AppMain w.q


 smile  smile

Добавлено @ 18:20 
Цитата(Stampede @ 19.9.2006,  18:14)
Цитата(DEER @  19.9.2006,  08:41 Найти цитируемый пост)
Для дела мне нужно создать веб приложение работающее с БД.


Если это веб приложение, то проще всего положить jar с драйвером в папку WEB-INF/lib. Там загрузчик классов контейнера найдет его автоматически, без явного прописывания пути к файлу.

Спаисбо друг... пошло...  smile 

кстати.... IDEA мне туда некоторые либы перенёс, а вот его не захотел...

Автор: Stampede 19.9.2006, 18:31
Цитата(DEER @  19.9.2006,  09:17 Найти цитируемый пост)
Спаисбо друг... пошло...


На здоровье smile

Вообще на будущее: когда берешься за веб проект, очень удобно все внешние библиотеки, требующиеся в работе, складывать именно в WEB-INF/lib. Для этого, собственно, эта директория и задумывалась авторами спецификации.

Автор: batigoal 19.9.2006, 22:24
Цитата(Stampede @  19.9.2006,  19:31 Найти цитируемый пост)
Вообще на будущее: когда берешься за веб проект, очень удобно все внешние библиотеки, требующиеся в работе, складывать именно в WEB-INF/lib. Для этого, собственно, эта директория и задумывалась авторами спецификации. 

Кошерно ли? А если куча мелких приложений со множеством сторонних библиотек будет крутится - свалка же получится.

Автор: Stampede 19.9.2006, 23:16
Цитата(batigoal @  19.9.2006,  13:24 Найти цитируемый пост)
Кошерно ли? А если куча мелких приложений со множеством сторонних библиотек будет крутится - свалка же получится.


И?

В принципе, если есть несколько проектов, и какие-то из них используют одни и те же библиотеки (например, log44, драйвера JDBC и т. д.), то можно, конечно, эти jar'ы сложить в разделяемую контейнерскую папку, такую как, скажем, tomcat/shared/lib. Просто это будет (а) более контейнеро-зависимым, и (б) надо будет не забыть добавить эти файлы к CLASSPATH проекта, а не то при запуске в обход контейнера они могут не подхватиться.

А вообще я имел в виду, что есть стандартное место для таких вещей, и грех им не пользоваться smile

Автор: _and 22.9.2006, 09:02
Цитата(DEER @ 19.9.2006,  23:17)

кстати.... IDEA мне туда некоторые либы перенёс, а вот его не захотел...

Хай DEER.

а ты просто када новые либы в вебовский проект добавляешь, проверяй на закладке 
"Web Module Settings" (это находится в настройках модуля) какие либы у тя деплоятся 
вместе с проектом в эксплодед директорию(сам неск. раз натыкался на такую траблу)

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)