0

DB2 データベースに対して照会および書き込みを行うパイロット プロジェクトを試みています。StackOverFlow や Web で多くの例を見てきました。しかし、何らかの理由で、データベースに接続するときにアプリケーションがハングします。さまざまなドライバーを試しましたが、それでも同じ結果が得られます。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.sql.SQLException;
import java.sql.PreparedStatement;

public class DBManager {
public DBManager()
{ 
    try 
    {
        Class.forName("com.ibm.db2.jcc.DB2Driver");
    }
    catch (ClassNotFoundException e) 
    {
         System.out.println("Please include Classpath  Where your DB2 Driver is located");
         e.printStackTrace();
         return;
    }
    System.out.println("DB2 driver is loaded successfully");
    Connection conn = null;
    PreparedStatement pstmt = null;
    ResultSet rset=null;
    boolean found=false;
    try 
    {
        System.out.println("DB2 Database Connecting...");
        conn = DriverManager.getConnection("jdbc:db2://Hostname:8471/Databasename","user","password");
        if (conn != null)
        {
           System.out.println("DB2 Database Connected");
        }
        else
        {
            System.out.println("Db2 connection Failed ");
        }
        pstmt=conn.prepareStatement("SELECT * FROM P6DEVCDB00.ADCP FETCH FIRST 10 ROWS ONLY");
        rset=pstmt.executeQuery();
        if(rset!=null)
        {
            while(rset.next())
            {
                found=true;
                System.out.println("ID: "+rset.getString("ADCONTID"));                  
            }
        }
        if (found ==false)
        {
            System.out.println("No Information Found");
        }
    } 
    catch (SQLException e) 
    {
        System.out.println("DB2 Database connection Failed");
        e.printStackTrace();
        return;
    }   
}
}

更新 されたアプリケーションは例外なしでハングします

conn = DriverManager.getConnection(.

また、別のポート番号を使用してみましたが、例外を伴ういくつかのエラー (それらは異なります) とハングするだけです。

4

2 に答える 2

0

プログラムを見ると、接続リソースを閉じる必要があります。

catch (SQLException e) 
{
    System.out.println("DB2 Database connection Failed");
    e.printStackTrace();
    try{
       rset.close();
       pstmt.close();
       conn.close();
     }catch(SQLException e2){
        System.err.println("Unable to close database resources");
        e2.printStackTrace();
     }
}

また、catch ステートメントに「return」は必要ありません。Catch ブロックは、プログラムの例外のないフローに使用されます。「return」を使用して、catch 内でコードの突然の中断を再度使用することはお勧めできません。

于 2013-04-23T10:21:10.160 に答える
0

接続文字列が間違っていました。サーバーのドメインを含める必要がありました。 "jdbc:db2://Hostname/Databasename"である必要があり"jdbc:db2://Hostname.domain/Databasename"ました。

于 2014-07-30T14:14:49.470 に答える