1

みなさん、お疲れ様でした

Glassfish3.1.2でインポートされたjarファイルが表示されるのを防ぐのに問題があります。これは私の卒業生のプロジェクトなので、制約があります。Glassfish、Netbeans以外は使用できず、Maven、Hibernate、Earなどは使用できません。

組み込みのDerbyドライバーを使用しています。(別のDBを使用できますが、私の試行では問題が残っています)。

DBに接続するためのプレーンなJavaコードをいくつか作成しました。

    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);  
       }

それは醜いです、それは接続プールを使用しません、それは働きます。後で使用します。明らかに、私は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時間以上の読書と失敗した試験):

  • サーブレットとJavaコードは同じプロジェクトにあるため、derbyclient.jarは両方に表示されるはずです。
  • org.apache.berbyを作成すると、netbeansはオートコンプリート用のパッケージナビゲーターを表示するので、どこかにjarがあることがわかります。
  • derbyclient.jarを中に入れようとしました:
    • Glassfish / glassfish / domains / domain1 / lib
    • Glassfish / glassfish / domains / domain1 / lib / ext
    • Glassfish / glassfish / lib
  • ドライバー登録なしで試してみましたが、Javaコードはドライバー登録なしで動作しますが、「javax.servlet.ServletException:アプリに適したドライバーが見つかりません」というメッセージが表示されます。合理的だと思います。

私は私の知恵の終わりにいます。誰かが助けてくれますか?

編集:

昨日、先生からニュースが届きました。彼女は、NetbeansIDEがjarファイルを追跡できなくなったと非難しています。既知のバグのようです。

私はTomcatサーバーに切り替えるように暖かく勧められました。私はきっとそれを試してみます、しかし私はこの問題を解決するために働き続けます。他に良いアイデアはありますか?

4

2 に答える 2

2

" No suitable driver found"は通常、接続するために指定したJDBCURLの構文が正しくないことを意味します。または、ドライバがまったくロードされていません。

Class.forNameDBに接続する前に、を使用してドライバをロードする必要があります。ダービーのURLは次のとおりです。

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

Derbyの詳細については、ドキュメントをご覧ください。

またderby.jar、クラスパスに含まれていることを確認してください。プロジェクトのディレクトリの物理的な場所にderby.jarを配置することをお勧めし/WEB-INF/libます。その後、IDEが残りの処理を行います。

于 2012-07-24T11:10:51.557 に答える
1

(一般的に)ドライバーを自分でDriverManagerに登録しないでください。これはドライバー実装の責任です。JDBC 3.0以前(Java 5以前)の場合、クラスをロードして、それ自体を登録する必要があります。

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

クラスがロードされると、ドライバーは自分自身をDriverManagerに登録します。

META-INF/services/java.sql.DriverJDBC 4.0準拠のドライバー(Java 6および7)の場合、JDBC 4.xはServiceLoaderメカニズムを使用し、各準拠ドライバーはjarファイル内のファイルにドライバー実装を一覧表示するため、これを行う必要はありません。

したがって、一般に、「DriverManager.registerDriver(..)」を自分で呼び出さないでください。何らかの理由でドライバーを自分でコードに登録する必要がある場合(たとえば、ドライバーが実際にDriverManagerに自動的に登録されないため)、実際のドライバーもコンパイルパス(ビルドパス)にあることを確認してください。アプリケーションサーバーのlibフォルダーだけではありません(これが実際の問題のようです)。

また、クラスではなくDriverのインスタンスを登録する必要があることにも注意してください。したがって、それをインスタンス化する必要があります。

DriverManager.registerDriver(new org.apache.derby.jdbc.ClientDriver()); 
于 2012-07-24T19:00:47.267 に答える