2013-04-23 149 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