2013-04-23 152 views
0

我正在嘗試一個試用項目來查詢和寫入DB2數據庫。我在StackOverFlow和web上看到了很多例子。但由於某種原因,我的應用程序在連接數據庫時就掛起了。我嘗試了不同的驅動程序,但仍得到相同的結果。Java連接到DB2掛起

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(. 

我曾嘗試使用不同的端口號也嘗試過,但有些錯誤與例外(他們這樣做會發生變化)等只是掛。

+0

是否有例外? – Jayan 2013-04-23 10:18:44

+1

你是否已經通過調試器來了解它在哪一行掛起? – 2013-04-23 10:19:18

+1

您是否在控制檯中看到此「DB2驅動程序已成功加載」消息? – midhunhk 2013-04-23 10:20:38

回答

0

我的連接字符串錯了。我需要爲我們的服務器添加域名。 "jdbc:db2://Hostname/Databasename"需要爲"jdbc:db2://Hostname.domain/Databasename"

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'。捕獲塊被用於程序的未知流程,並且使用'return'再次使用捕獲內的代碼的突然中止不是一個好習慣。

+1

我看不出這將如何幫助? – ZioN 2013-04-23 10:27:03

+0

未能關閉資源有時會掛起應用程序。我不確定你在什麼環境下運行你的代碼。這在多線程生產系統中通常是這種情況。 – IndoKnight 2013-04-23 10:29:05

+0

這個想法後來被用作Java Web服務的一部分。因此,它是一個很好的主意,但在Windows PC上知道它只是一個運行在Eclipse中的Java應用程序。 – ZioN 2013-04-23 10:32:52