2012-01-10 31 views
0

Oracle 11g xeに接続するこの方法があります。それでもjava.lang.NullPointerException例外が返されます。私はEclipse IDEを使用します。助けてください、私はそれを修正する方法を知らない。Javaでoracle DBに接続するとNullPointerExceptionが返される

public static Connection connectDB() throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException { 

    Connection connection = null; 
    try { 
     // Load the JDBC driver 
     String driverName = "oracle.jdbc.driver.OracleDriver"; 
     Class.forName(driverName).newInstance(); 

     // Create a connection to the database 
     String serverName = "127.0.0.1"; 
     String portNumber = "1521"; 
     String sid = "xe"; 
     String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid; 
     String username = "peter"; 
     String password = "pass"; 
     connection = DriverManager.getConnection(url, username, password); 
     System.out.println(connection); 
    } catch (ClassNotFoundException e) { 
     // Could not find the database driver 
    } catch (SQLException e) { 
     // Could not connect to the database 
    } 
    System.out.println(connection); 
    return connection; 
} 
+2

投稿を投稿する –

+5

いつですか?どこ?どうやって? –

答えて

1

例外を無視し、すべてがうまくいくことを願っています。ただ、例外を無視して停止し、あなたはおそらく、あなたのNPEの根本的な原因があるでしょう:

public static Connection connectDB() throws ClassNotFoundException, SQLException, InstantiationException, IllegalAccessException { 

    Connection connection = null; 
    // Load the JDBC driver 
    String driverName = "oracle.jdbc.driver.OracleDriver"; 
    Class.forName(driverName).newInstance(); 

    // Create a connection to the database 
    String serverName = "127.0.0.1"; 
    String portNumber = "1521"; 
    String sid = "xe"; 
    String url = "jdbc:oracle:thin:@" + serverName + ":" + portNumber + ":" + sid; 
    String username = "peter"; 
    String password = "pass"; 
    connection = DriverManager.getConnection(url, username, password); 
    System.out.println(connection); 

    System.out.println(connection); 
    return connection; 
} 
+0

Eclipseでは、デフォルトで標準エラーでスタックトレースが作成されるため、例外を無視するのが容易になります。私はすぐにそれをIllegalStateException( "例外未処理"、e)とTODOタスクに変更します。 e.printStackTraceは、メソッドの内部状態も混乱させます(tryの外側で最終変数を宣言することはできません。ちょうど1つの名前を指定するか、キャッチ後にリターンを必要とします)。もちろん、それらを投げることももちろん役に立ちます。 –

+0

@owlstead:同意します。私も同じことをする。しかし、Eclipseのクレジットには、少なくとも例外を記録し、それを完全に呑み込むだけではありません。 –

1

私はスタックトレースが掲載された場合でも、NullPointerExceptionが質問に掲載コードの一部では起こらないと思います。変数の初期化ではない行が2行だけであるか、または単純なSystem.out.println文(いずれにしてもnullを処理できます)があります。

Class.forName(driverName)が見つからない場合に例外を引き起こす可能性があります

Class.forName(driverName).newInstance(); 

ラインがあります。しかし、これによりClassNotFoundExceptionが発生し、NullPointerExceptionが発生しないため、これは排除できます。例外が発生する場合があります

唯一の他のラインは

connection = DriverManager.getConnection(url, username, password); 

ラインです。ただし、url,usernameおよびpasswordはすべてnullであり、この行でも例外は発生しません。

ボトムラインは、スタックトレースを取得し、自分で分析してください(IDEを使用する場合は簡単ですが、スタックトレースをクリックしてIDEがあなたの所在地を参照するだけです)。

ああ、なぜそれをキャッチしてメソッドの実装でそれを無視する場合はClassNotFoundExceptionをスローするメソッドを宣言しますか?これは両方の世界の最悪のようでなければならない

+0

私はこの行を使用して "connection"変数に接続します。Connection connection = DatabazaOracle.connectDB();ここでは、変数接続がnullであることをデバッガに伝えます –

+0

例外のスタックトレースをここに関連コードと共に投稿します。 stacktrace: 'exception.printStackTrace()'を取得するには、コンソールに出力する – Robin

2

問題はoracleのドライバにありました。私はそれをサーバーフォルダにojdbc14.jarファイルを入れて置くことによって解決します。私は風袋​​を使用しているので、ojdbc14.jarファイルをフォルダに入れますapache-tomcat-7.0.8\lib\

+3

'ojdbc14.jar'はJava 1.4用です。 'ojdbc5.jar'(Java 1.5用)または' ojdbc6.jar'(Java 1.6用)を使用する必要があります。 –

関連する問題