连接DB2数据库报错

VF 2008-07-17 10:48:29
小弟写了一个程序,连接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中可以看到已经自动加载,请教各位前辈,我的问题该怎么解决啊?
...全文
230 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
arrowzong 2008-07-17
  • 打赏
  • 举报
回复
驱动问题,可能驱动版本不对,这东西对版本要求比较娇气
VF 2008-07-17
  • 打赏
  • 举报
回复
再附加一点,刚刚写错了...

Type2中驱动名字:COM.ibm.db2.jdbc.app.DB2Driver 不能写错,大小写分清楚

Type4中驱动名字:com.ibm.db2.jcc.DB2Driver 不能写错,大小写分清楚
VF 2008-07-17
  • 打赏
  • 举报
回复
附加一点,COM.ibm.db2.jdbc.app.DB2Driver这几个驱动的名字中,COM必须大写,否则就找不到了
VF 2008-07-17
  • 打赏
  • 举报
回复
嘿嘿,问题已经解决

郁闷啊,网上关于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代替
awusoft 2008-07-17
  • 打赏
  • 举报
回复
没有DB2数据库,帮不上了
VF 2008-07-17
  • 打赏
  • 举报
回复
版本?这里这个“版本”是与什么对应的?

我是从DB2数据库的安装文件夹下找出来的驱动,应该与数据库不会版本不对吧?

62,614

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧