请教高手!使用serlvet连接远端得DB2数据库(源码在内,测试不通过)? 我连接过其他机器上得DB2数据库(winXP db2 v7英文版),没问题 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你不是没有import db2的驱动程序包吧 需要import吗?你指得是哪个包? 当然是COM.ibm.db2.jdbc.net.DB2Driver所在的包了你注册驱动程序 编译器的去找它啊我用oracle 没用过db2 不太确定是哪一个包你应该知道的 唉你查查吧 我知道编译的时候需要db2针对java的包,是在db2\sqllib\java\db2java.zip中但是在源代码中不需要用import语句来引入具体的类吧?请让我看看你联oracle的源代码! import java.lang.*;import java.sql.*; import oracle.jdbc.driver.*; //倒入要用到的包 public class hhw extends Object{ public static void main(String args[]) throws SQLException, ClassNotFoundException //抛出SQLException异常 { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Class.forName ("oracle.jdbc.driver.OracleDriver"); // 登记驱动程序,准备联接数据库Connection cn1 =DriverManager.getConnection"jdbc:oracle:thin:@192.168.1.52:1521:SONIC", "sadly", "sadly"); Connection cn1 Statement s1=cn1.createStatement();ResultSet rs1=s1.executeQuery("select * from users where id>0 and id<4 0000 "); //从数据源中取得数据,定义一些中间变量 int id; String name=new String("1");String passwd=new String("1");String email=new String("1"); //执行另一个查询,向目的数据库插入数据 while(rs1.next()){id=rs1.getInt(1);name=rs1.getString("name");passwd=rs1.getString("passwd");email=rs1.getString("email"); //System.out.print(id+name+passwd+email);s1.executeQuery("insert into bbsuser values(\\"+id+"\,\\"+name+"\,\\"+pas swd+"\,\\"+email+"\)"); } }} 这不是我编的原码 我不太肯定对不对 不过连数据库的那几句肯定是对的 我也是碰到这个问题了。你IMPORT也是没有用的,不信你试试看,我到现在还是没有搞定。呵呵,就是这么奇怪阿 当然没用 oracle 的驱动程序包你的机器上没有我的机器上可是有的 这是DB2提供的帮助:CLI0601E 语句句柄无效或语句已关闭。 说明: 在操作前已关闭语句。 用户的响应: 确保在操作前未调用语句关闭和语句连接关闭。 你可以把错误栈打出来看看在那一行,还有你用的是 SELECT * FROM 你可以检查看看你的数据是不是同你数据库中的列一致你的驱动是正确 在server端: (AIX、DB2 UDB V7 英文版)以TCP/IP方式 CATALOG db 你把driver扔到相应的web-ifo目录去看看!程序中没必要import driver,dirver 是动态加载的!如果还不行!你的static 块会不会出问题,能保证驱动程序一直加载吗? driver应放在web-inf/class目录吧!与classpath 无关! 从前几个留言看来,是不是driver加载的问题,小弟初学java,还不知道如何调试出那条语句出错?请告知!! 经过调试,是在这条语句是出错Statement stmt = con.createStatement();前一条是con = DriverManager.getConnection(dburl,userid,passwd);请问各位这是哪除了错? 我来分析一下!应该是Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();无法加载driver!因为,你把它放在static块内!所以调试的时候并未执行该static块,自然在DriverManager.getConnection(dburl,userid,passwd)无法建立连接!可见,java没有加载driver!把Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();挪到doGet()内!这里应该会出错! 我试过你说的象这样:import java.io.*;import java.sql.*;import java.util.*;public class Test{ public static void main(String[] str){ Connection con=null; String userid="db2dev"; String passwd="db2dev"; String dburl="jdbc:db2://172.16.253.13:6789/dev"; try { Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance(); con = DriverManager.getConnection(dburl,userid,passwd); System.out.println("....."+con.toString()); System.out.println("hi"); Statement stmt = con.createStatement(); }catch (Exception e) { System.out.println("error: " + e.toString()); } } } 还是不行!显示error: COM.ibm.db2.jdbc.DB2Exception: [IBM][JDBC Driver] CLI0601E 语句句柄无效或语句已关闭。SQLSTATE=S1000 插入语句看看,哪出错?Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();System.out.println("hihi1");con = DriverManager.getConnection(dburl,userid,passwd); 试试能不能直接telnet到 172.16.253.13:6789。 求一个Java多线程例子 如何在java应用程序中加入循环播放的声音 用java做聊天室程序该怎样设计? 彩信收发问题 有搞JAVA3D的同仁吗? 关于Inflater解压的问题 大家一定要回我哦??? 问:《java与模式》怎么样?适合什么样的人看! ★公告:申请子版斑竹具体方法!!! 请教关于树节点,100分献上! 一个很急的问题!!!多谢! 求救:关于将类型名称字符串转变成类型相应类型的问题
你指得是哪个包?
你注册驱动程序 编译器的去找它啊
我用oracle 没用过db2 不太确定是哪一个包
你应该知道的 唉
你查查吧
但是在源代码中不需要用import语句来引入具体的类吧?
请让我看看你联oracle的源代码!
import java.sql.*; import oracle.jdbc.driver.*; //倒入要用到的包 public class hhw extends Object
{ public static void main(String args[]) throws SQLException, ClassNotFoundException //抛出SQLException异常 { Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Class.forName ("oracle.jdbc.driver.OracleDriver"); // 登记驱动程序,准备联接数据库Connection cn1 =DriverManager.getConnection"jdbc:oracle:thin:@192.168.1.52:1521:SONIC", "sadly", "sadly"); Connection cn1
Statement s1=cn1.createStatement();
ResultSet rs1=s1.executeQuery("select * from users where id>0 and id<4 0000 "); //从数据源中取得数据,定义一些中间变量 int id; String name=new String("1");
String passwd=new String("1");
String email=new String("1"); //执行另一个查询,向目的数据库插入数据 while(rs1.next())
{id=rs1.getInt(1);
name=rs1.getString("name");
passwd=rs1.getString("passwd");
email=rs1.getString("email"); //System.out.print(id+name+passwd+email);
s1.executeQuery("insert into bbsuser values(\\"+id+"\,\\"+name+"\,\\"+pas swd+"\,\\"+email+"\)"); } }}
这不是我编的原码 我不太肯定对不对 不过连数据库的那几句肯定是对的
我的机器上可是有的
你可以把错误栈打出来看看在那一行,还有你用的是 SELECT * FROM 你可以
检查看看你的数据是不是同你数据库中的列一致你的驱动是正确
以TCP/IP方式 CATALOG db
程序中没必要import driver,
dirver 是动态加载的!如果还不行!
你的static 块会不会出问题,能保证驱动程序一直加载吗?
与classpath 无关!
Statement stmt = con.createStatement();
前一条是
con = DriverManager.getConnection(dburl,userid,passwd);
请问各位这是哪除了错?
应该是Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();无法加载driver!因为,你把它放在static块内!
所以调试的时候并未执行该static块,
自然在DriverManager.getConnection(dburl,userid,passwd)无法建立连接!
可见,java没有加载driver!
把Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();
挪到doGet()内!这里应该会出错!
象这样:
import java.io.*;
import java.sql.*;
import java.util.*;public class Test{
public static void main(String[] str){
Connection con=null;
String userid="db2dev";
String passwd="db2dev";
String dburl="jdbc:db2://172.16.253.13:6789/dev";
try {
Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();
con = DriverManager.getConnection(dburl,userid,passwd);
System.out.println("....."+con.toString());
System.out.println("hi");
Statement stmt = con.createStatement();
}catch (Exception e)
{
System.out.println("error: " + e.toString());
}
}
} 还是不行!显示
error: COM.ibm.db2.jdbc.DB2Exception: [IBM][JDBC Driver] CLI0601E 语句句柄无效或语句已关闭。SQLSTATE=S1000
Class.forName("COM.ibm.db2.jdbc.net.DB2Driver").newInstance();
System.out.println("hihi1");
con = DriverManager.getConnection(dburl,userid,passwd);