0

サーブレットから DB 接続をセットアップしようとすると、いくつかの問題が発生します。

サーブレットで DB 接続を処理する次のクラスがありますが、NullPointerException が発生し続けClass.forName()ます。

DB ユーティリティ クラス:

public class Database {

    private static Connection connection = null;

    /**
     * 
     * @return
     */
    public static Connection getConnection(){
        if(connection!=null){
            return connection;
        } else {
            try {
                Properties db_properties = new Properties();
                InputStream inStream = Database.class.getClassLoader().getResourceAsStream("/db.properties");
                db_properties.load(inStream);
                //String dbDriver = db_properties.getProperty("driver").trim();
                String url = db_properties.getProperty("url").trim();
                String dbUser = db_properties.getProperty("user").trim();
                String dbPass = db_properties.getProperty("pass").trim();
                Class.forName("com.mysql.jdbc.Driver");
                connection = DriverManager.getConnection(url,dbUser,dbPass);
            } catch (IOException e) {
                e.printStackTrace();
            } catch (ClassNotFoundException e) {
                e.printStackTrace();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        return connection;
    }
}

次のプロパティ ファイルを使用します (ドライバーをハードコーディングしてみましたが、同じエラーが発生します!):

driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:8889/gymbuddy
user=Mathan
pass=PYCCmcPDAFSj7N9B

そして、次のスタック トレースを取得します。

SEVERE: Allocate exception for servlet BuddyController
java.lang.NullPointerException
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Class.java:171)
    at com.mathanv.gb.util.Database.getConnection(Database.java:35)
    at com.mathanv.gb.dao.BuddyDao.<init>(BuddyDao.java:35)
    at com.mathanv.gb.controller.BuddyController.<init>(BuddyController.java:29)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
    at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
    at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
    at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
    at java.lang.Class.newInstance0(Class.java:357)
    at java.lang.Class.newInstance(Class.java:310)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:138)
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1137)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:858)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:136)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:936)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:407)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1004)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:310)
    at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918)
    at java.lang.Thread.run(Thread.java:680)

Android クライアントから投稿リクエストを送信しようとしています。HTTPpost リクエストが機能しているようです。しかし、接続を取得すると、上記の例外が発生します! ヘルプ!

以下は私のサーブレットのレイアウトです:

サーブレットのレイアウト

さらに情報が必要な場合はお知らせください。

4

4 に答える 4

1

この例外を取得する唯一の方法は、nullClass.forName()に渡すか、JVMが破損している可能性があることです。あなたが示したコードはその例外をスローすることはできません。結果を再確認してください。最悪の場合、を取得する必要がありClassNotFoundExceptionます。コードを更新したが、まだコンパイルおよび再デプロイしていないため、サーバーで実行されている古いコードの結果がまだ表示されている可能性があります。

于 2013-03-03T13:15:45.503 に答える
0

Are you sure when you hard coded the driver name in the code then also you are getting same error. Class.forName() throws null pointer exception when you pass null as parameter. i think in the first case property file is not loaded and driver name returns null.

于 2013-03-03T13:26:04.013 に答える
-1

これは、より多くの場所にmysqlドライバーがある場合に発生します。

他の場所を探すか、libフォルダーからiを削除してください。私が言っている通りなら、問題は解決されるべきです。

于 2013-03-03T13:08:04.600 に答える
-1

Delete your code immediately and use a DataSource right now in Tomcat. Your code is far away from being high quality.

于 2013-03-03T13:24:44.447 に答える