小弟写了一个程序,连接DB2数据库的时候报错:
java.sql.SQLException: No suitable driver
at java.sql.DriverManager.getConnection(DriverManager.java:545)
at java.sql.DriverManager.getConnection(DriverManager.java:171)
at dao.DBConnection.DBConnection(DBConnection.java:27)
at com.yourcompany.struts.action.LoginTestAction.execute(LoginTestAction.java:43)
at org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:431)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:236)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Thread.java:595)数据库连接代码如下:
public class DBConnection{

public UserDAO DBConnection(){
try{
Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance(); }catch(Exception e){
e.printStackTrace();
}

Connection coon=null;
Statement stmt=null;
ResultSet rs=null;
String url="jdbc:db2://localhost:50000/DB2_TEST";
String user="admin";
String psw="19861108";
String sql="select * from test";
PreparedStatement ptmt=null;

try{
coon=DriverManager.getConnection(url, user, psw);
stmt=coon.createStatement();
// stmt.executeUpdate(sql);
rs=stmt.executeQuery(sql);

UserDAO us=new UserDAO();

if(rs.next()){
us.setUserName(rs.getString(2));
us.setPassword(rs.getString(3));
}

return us;
}catch(Exception ex){
ex.printStackTrace();
} finally{
try{
rs.close();
stmt.close();
coon.close();
}catch(Exception ex){
ex.printStackTrace();
}
}
return null;
}
}DB2数据库安装文件夹中的db2jcc.jar,db2jcc_license_cu.jar已经复制到Tomcat中,工程下也有,也已经将db2java,jar复制到工程/WEB-INF/lib下,在Myeclipse中可以看到已经自动加载,请教各位前辈,我的问题该怎么解决啊?

解决方案 »

  1.   

    此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
    楼主【tiger435】截止到2008-07-17 10:48:43的历史汇总数据(不包括此帖):
    发帖的总数量:1                        发帖的总分数:20                       每贴平均分数:20                       
    回帖的总数量:2                        得分贴总数量:1                        回帖的得分率:50%                      
    结贴的总数量:1                        结贴的总分数:20                       
    无满意结贴数:0                        无满意结贴分:0                        
    未结的帖子数:0                        未结的总分数:0                        
    结贴的百分比:100.00%               结分的百分比:100.00%                  
    无满意结贴率:0.00  %               无满意结分率:0.00  %                  
    敬礼!
      

  2.   

    嘿嘿,问题已经解决郁闷啊,网上关于DB2数据库连接的内容实在是太混乱了所以造成网上查找原因的朋友们总是没办法解决真实的原因如下:数据库的连接方式分为四种:Type 1:这类驱动程序将 JDBC API 作为到另一个数据访问 API 的映射来实现,如开放式数据库连通性(Open Database Connectivity,ODBC)。这类驱动程序通常依赖本机库,这限制了其可移植性。JDBC-ODBC 桥驱动程序就是 Type 1 驱动程序的最常见的例子,不过IBM已经不支持了现在。 
    Type 2:COM.ibm.db2.jdbc.app.DB2Driver,这类驱动程序部分用 JAVA 编程语言编写,部分用本机代码编写。这些驱动程序使用特定于所连接数据源的本机客户端库。同样,由于使用本机代码,所以其可移植性受到限制。 
    Type 3:COM.ibm.jdbc.net.DB2Driver这类驱动程序使用纯 JAVA 客户机,并使用独立于数据库的协议与中间件服务器通信,然后中间件服务器将客户机请求传给数据源。 
    Type 4:COM.ibm.jdbc.jcc.DB2Driver这类驱动程序是纯 JAVA,实现针对特定数据源的网络协议。客户机直接连接至数据源。 DB2 V8.0以下不支持TYPE2和TYPE3,不过现在低版本已经使用比较少了,常用的还是Type2(app连接)和Type4(jcc,通用JDBC连接)连接方式:一、如果你写的数据库驱动加载语句是Class.forName("COM.ibm.db2.jdbc.app.DB2Driver").newInstance(); 这就是Type2连接,其驱动在db2java.zip中,名字:COM.ibm.db2.jdbc.app.DB2Driver,连接的URL为:jdbc:db2:数据库名称,不需要IP什么的;二、如果你写的数据库驱动加载语句是Class.forName("COM.ibm.jdbc.jcc.DB2Driver").newInstance();这是Type4连接,其驱动在db2jcc.jar中,名字:COM.ibm.jdbc.jcc.DB2Driver,同时,使用这种连接方式的时候必须加载许可证,db2jcc_license_cu.jar,而且如果环境变量的classpath中没有的需要加进去,连接URL为:jdbc:db2://IP地址:端口/数据库名称;Type3连接方式因为不支持分布式事务,而且象J2EE服务器等不少服务器并不支持,所以一般可以采用Type4代替
      

  3.   

    附加一点,COM.ibm.db2.jdbc.app.DB2Driver这几个驱动的名字中,COM必须大写,否则就找不到了
      

  4.   

    再附加一点,刚刚写错了...Type2中驱动名字:COM.ibm.db2.jdbc.app.DB2Driver   不能写错,大小写分清楚Type4中驱动名字:com.ibm.db2.jcc.DB2Driver        不能写错,大小写分清楚