2012-07-24 2 views
1

모두에게 좋은 날,glassfish의 더비 드라이버 가져 오기 관련 문제

Glassfish 3.1.2에 가져온 항아리를 보는 데 약간의 문제가 있습니다. 왜냐하면 이건 내 대학원 프로젝트에 제약이 있기 때문이야. 글래스 피쉬, 넷 빈스 외에는 아무것도 사용할 수 없으며 메이븐, 하이버 네이트, 귀 또는 기타를 사용할 수 없습니다.

임베디드 Derby 드라이버로 작업하고 있습니다. (나는 다른 DB를 사용할 수 있지만, 나의 시련에서는 문제가 남아있다.)

제가 DB에 연결하는 일부 일반 자바 코드를 작성했습니다 : 그것은 추한

try{ 
     Connection c = DriverManager.getConnection(URL, USER, PWD); 
     Statement st = c.createStatement();     
     st.executeUpdate("CREATE TABLE Users" + 
         " (ACCOUNT VARCHAR(20) PRIMARY KEY," + 
         " PWD VARCHAR(20) NOT NULL," + 
         " USERTYPE INTEGER NOT NULL)"); 

         ... 

     } 
     catch (SQLException x){ 
     System.out.println(x); 
     } 

,이 연결 풀을 사용하지 않는, 그것을 작동합니다. 나중에 사용하겠습니다. 분명히 libs에 derbyclient.jar를 추가해야했습니다.

protected void processRequest(HttpServletRequest req, HttpServletResponse res) 
     throws ServletException, IOException { 

    try{   
     DriverManager.registerDriver(org.apache.derby.jdbc.ClientDriver);    
     Connection c = DriverManager.getConnection(dbUsr, pwd, url);    
     Statement st = c.createStatement();    
     ResultSet rs = st.executeQuery(query); 

         ... 

     }catch (SQLException e){ 
     ServletException e1 = new ServletException(e.getMessage()); 
     throw e1; 
    } 

내가 "존재하지 않는 org.apache.derby.jdbc 패키지"때문에 서블릿을 컴파일 할 수 없습니다 : 내가 서블릿 내에서이 방법을 사용하려고하면

문제

가 발생합니다.

좀 더 많은 정보 (20+ 독서의 시간, 개 실패 시험) 제공 할 수

  • 같은 프로젝트에 서블릿과 자바 코드를, 그래서 derbyclient.jar는 둘 다 볼 수 있어야 .
  • org.apache.berby로 작성하면 netbeans가 자동 완성을위한 패키지 탐색기를 보여주기 때문에 병이 있음을 알고 있습니다.
    • 글래스 피시/글래스 피쉬/도메인/domain1을/lib에
    • 글래스 피시/글래스 피쉬/도메인/domain1을// 내선 lib에
    • 글래스 피시/글래스 피쉬/lib에
    :
  • 나는 내 derbyclient.jar 넣어 시도
  • 드라이버 등록없이 시도했지만 Java 코드가 없어도 작동하지만 "javax.servlet.ServletException : 앱에 적합한 드라이버가 없습니다"라는 메시지가 표시됩니다. 나는 그것이 합리적이라고 느낀다.

나는 재치가있다. 누군가가 돕기 위해 돌보는가?

는 편집 :

어제는 선생님 소식이있어 : 그녀는 단지 추적을 잃고위한 넷빈즈 IDE를 비난한다. 그것은 알려진 버그 인 것 같습니다.

Tomcat 서버로 전환하는 것이 좋습니다. 나는 분명히 그것을 시도 할 것이다, bu 나는이 문제를 해결하기 위해 노력할 것이다. 다른 좋은 생각이야?

+0

난 당신이 제안한 단지를 배치합니다 오류 스택 추적 –

답변

1

"No suitable driver found"일반적으로 연결하기 위해 제공 한 JDBC URL의 구문이 잘못되었음을 나타냅니다. 또는 드라이버가 전혀로드되지 않았습니다.

DB에 연결하기 전에 Class.forName을 사용하여 드라이버를로드해야합니다.더비에 대한 URL은 다음과 같습니다 더비에

Class.forName("org.apache.derby.jdbc.ClientDriver"); 

자세한 내용은 당신이 당신의 클래스 경로에 derby.jar이 있는지 확인 또한 documentation

을 확인하십시오. 실제 위치에 derby.jar을 프로젝트의 /WEB-INF/lib 디렉토리에 배치하는 것이 좋습니다. 그러면 IDE가 나머지를 처리합니다.

+0

를 제공 (빌어 먹을이 이상한 소리 : P)를. ide에서 자동 완성을 사용하기 때문에 잘못된 구문을 무시합니다. 다른 모든 것에 잘 작동합니다. 그리고 그 클래스와 이상한 방식으로 작동합니다. 탭을 클릭하고 선택 사항을 클릭하면 빨간색으로 밑줄이 그어지면서 오류가 발생합니다. – user1548241

+0

@ user1548241 : 수정 된 답변으로 확인하십시오 –

0

DriverManager에 드라이버를 직접 등록하지 않아야합니다. 이는 드라이버 구현의 책임입니다. 당신이 얻을 수있는 클래스를로드 할 필요가 JDBC 3.0 및 earliers를 들어 (자바 5 전) 그 자체를 등록 : 클래스가로드 될 때

Class.forName("org.apache.derby.jdbc.ClientDriver") 

, 운전자가 자기 자신을 DriverManager로 등록합니다.

JDBC 4.0 호환 드라이버 (Java 6 및 7)의 경우 JDBC 4.x가 ServiceLoader 메커니즘을 사용하고 각각의 호환 드라이버가 해당 드라이버 구현을 해당 jar 파일 형식의 META-INF/services/java.sql.Driver 파일에 나열하므로조차 필요하지 않습니다. 파일.

따라서 일반적으로 가 아닌을 'DriverManager.registerDriver (..)'라고 직접 부릅니다. 어떤 이유로 드라이버에 코드를 직접 등록해야하는 경우 (예 : 드라이버가 자동으로 DriverManager에 자동으로 등록되지 않기 때문에) 실제 드라이버가 컴파일 경로 (빌드 경로)에 있는지 확인하고 응용 프로그램 서버의 lib 폴더가 아닙니다 (실제 문제 인 것 같습니다).

또한 클래스가 아닌 Driver의 인스턴스를 등록해야합니다. 그래서 당신은 그것을 인스턴스화해야합니다

DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver()); 
+0

설명 주셔서 대단히 감사합니다. 나는 언급하지 않았다, 나는 운전사의 istance를 사용한다. 나는 Class.forName을 사용하려고 노력할 것이다. 아마도 문제가있는 곳일 것이다. – user1548241