此回复为自动发出,仅用于显示而已,并无任何其他特殊作用
楼主【echoyyff】截止到2008-07-10 13:47:37的历史汇总数据(不包括此帖):
发帖的总数量:0                        发帖的总分数:0                        每贴平均分数:0                        
回帖的总数量:0                        得分贴总数量:0                        回帖的得分率:0%                       
结贴的总数量:0                        结贴的总分数:0                        
无满意结贴数:0                        无满意结贴分:0                        
未结的帖子数:0                        未结的总分数:0                        
结贴的百分比:---------------------结分的百分比:---------------------
无满意结贴率:---------------------无满意结分率:---------------------
如何结贴请参考这里:http://topic.csdn.net/u/20080501/09/ef7ba1b3-6466-49f6-9d92-36fe6d471dd1.html

解决方案 »

  1.   

    你的DBQueryBean 类有问题,在使用mysql数据库的时候需要指定mysql的JDBC驱动类,而在调用oracle数据库的时候需要指定oracle的JDBC驱动类,而你的DBQueryBean 在初始化的时候肯定是只指定了一个数据库的驱动类,在mySQLQuery方法和oracleQuery执行的时候却东使用这一个驱动类,当然会有一个出错了了
      

  2.   

    用了两个驱动类的。我在dBQueryBean写了两个方法,在main方法传入dbname的时候,连接池管理类会根据我传入的dbname查找相应的连接池进行连接而且我跟踪进去也可以看到两个连接池的驱动是不一样的
      

  3.   

    这是DBConnectionManager类,在init()中会load所有的driver,我看到有oracle和mysql两个driver,然后创建两个连接池,在getConnection()中会根据我传入的dbname来连接不同的连接池
    可是dBQueryBean哪里有问题呢import java.sql.Connection;
    import java.util.Enumeration;
    import java.util.Hashtable;
    import java.util.Iterator;
    import java.util.Vector;/**
     * 数据库连接池管理类
     */
    public class DBConnectionManager {

     static private DBConnectionManager instance;//唯一数据库连接池管理实例类
     //static private int clients;                 //客户连接数
     private Vector<DSConfigBean> drivers  = new Vector<DSConfigBean>();//驱动信息
     private Hashtable<String, DBConnectionPool> pools=new Hashtable<String, DBConnectionPool>();//连接池
     
     /**
      * 实例化管理类
      */
     public DBConnectionManager() {  
     this.init();
     }
     /**
      * 得到唯一实例管理类
      * @return
      */
     static synchronized public DBConnectionManager getInstance(){
      if(instance==null)
      {
       instance=new DBConnectionManager();
      }
      return instance;  
     }
     /**
      * 释放连接
      * @param name
      * @param con
      */
     public void freeConnection(String name, Connection con){
      DBConnectionPool pool=pools.get(name);//根据关键名字得到连接池
      if(pool!=null)
      pool.freeConnection(con);//释放连接 
     }
     /**
      * 得到一个连接根据连接池的名字name
      * @param name
      * @return
      */
     public Connection getConnection(String name){
      DBConnectionPool pool=null;
      Connection con=null;
      pool=pools.get(name);//从名字中获取连接池
      System.out.println("pool is :"+pool);
      con=pool.getConnection();//从选定的连接池中获得连接
      if(con!=null)
      {System.out.println("得到连接...");
      System.out.println(con);
      }
      else System.out.println("得不到连接...");
      return con;
     }
     /**
      * 得到一个连接,根据连接池的名字和等待时间
      * @param name
      * @param time
      * @return
      */
     public Connection getConnection(String name, long timeout){
      DBConnectionPool pool=null;
      Connection con=null;
      pool=pools.get(name);//从名字中获取连接池
      con=pool.getConnection(timeout);//从选定的连接池中获得连接
      System.out.println("得到连接...");
      return con;
     }
     /**
      * 释放所有连接
      */
     public synchronized void release(){
      Enumeration<DBConnectionPool> allpools=pools.elements();
      while(allpools.hasMoreElements())
      {
       DBConnectionPool pool=allpools.nextElement();
       if(pool!=null)pool.release();
      }
      pools.clear();
     }
     /**
      * 创建连接池
      * @param props
      */
     private void createPools(DSConfigBean dsb)
     {
      DBConnectionPool dbpool = new DBConnectionPool();
      dbpool.setName(dsb.getName());
      dbpool.setDriver(dsb.getDriver());
      dbpool.setUrl(dsb.getUrl());
      dbpool.setUser(dsb.getUsername());
      dbpool.setPassword(dsb.getPassword());
      dbpool.setMaxConn(dsb.getMaxconn());
      System.out.println("ioio:"+dsb.getMaxconn());
      pools.put(dsb.getName(), dbpool);
       System.out.println("pools :"+pools);
     }
     /**
      * 初始化连接池的参数
      */
     private void init()
     {
      //加载驱动程序
      this.loadDrivers();
      //创建连接池
      Iterator<DSConfigBean> alldriver=drivers.iterator();
      while(alldriver.hasNext())
      {
       this.createPools(alldriver.next());
       System.out.println("创建连接池");    
      }
      System.out.println("创建连接池完毕...");
     }
     /**
      * 加载驱动程序
      * @param props
      */
     private void loadDrivers()
     {
      ParseDSConfig pd=new ParseDSConfig();
     //读取数据库配置文件
      drivers=pd.readConfigInfo("DBconfig.xml");
      System.out.println("drivers is :"+drivers);
      System.out.println("加载驱动程序...");
     }
    }
    下面是dBQueryBean类import java.io.Serializable;
    import java.sql.ResultSet;
    import java.sql.SQLException;import com.mysql.jdbc.Connection;
    import com.mysql.jdbc.Statement;public class DBQueryBean implements Serializable { // 得到唯一实例
    DBConnectionManager connectionMagr = DBConnectionManager.getInstance(); public void mySQLQuery(String dbname, String sql) { //得到连接
    //String ServerName="tsus_tracking";//从上下文得到你要访问的数据库的名字
    Connection MySQLConn = (Connection) connectionMagr
    .getConnection(dbname); //使用
    try {
    Statement stmt = (Statement) MySQLConn.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    while (rs.next()) {
    System.out.println(rs.getString(2));
    } System.out.println("success");
    } catch (SQLException e1) {
    e1.printStackTrace();
    System.out.println("sorry can't create Connection!");
    } finally {
    // 使用完毕
    connectionMagr.freeConnection(dbname, MySQLConn);//释放,但并未断开连接
    } } //oracle 查询 public void oracleQuery(String servname, String sql) { //得到连接
    //String ServerName="orcl";//从上下文得到你要访问的数据库的名字
    System.out.println(servname);
    Connection con = (Connection) connectionMagr.getConnection(servname);
    System.out.println(con); //使用
    try {
    Statement stmt = (Statement) con.createStatement();
    ResultSet rs = stmt.executeQuery(sql);
    while (rs.next()) {
    System.out.println(rs.getString(1));
    } System.out.println("success");
    } catch (SQLException e1) {
    e1.printStackTrace();
    System.out.println("sorry can't create Connection!");
    } finally {
    // 使用完毕
    connectionMagr.freeConnection(servname, con);//释放,但并未断开连接
    }
    }}
      

  4.   

    看了你的程序了,由你的错误信息结合你的代码看,你的DBConnectionPool类的getConnection方法肯定是由问题的,也就是你首先执行对mysql的查询,那么此时得到的这个connection在你的DBConnectionPool中被保存了下来,下次执行oracle查询的时候却没有重新获取对oracle 的connection,用的仍然是mysql的connection,所以才导致类型不匹配的错误,好好检查你的DBConnectionPool的代码及相关的代码
      

  5.   

    找到问题了,是导入的connection包有问题