deregisterDriver原来的jdbc driver,再通过配置文件或其他得到接下来用什么driver再用registerDriver装入新的。

解决方案 »

  1.   

    没懂,可不可以说的详细写?
    分别打开两个不同数据库的连接没有问题,
    问题是判定字段类型,再对各个字段重新赋值很复杂(涉及道insert语句的写法)
    所以问是否直接传递结果集的方式来实现记录的复制。
      

  2.   

    下载一个Toad之后在在窗口界面进行操作。
      

  3.   

    先将数据导出到一个文件,导出的实际是一系列的SQL的Insert语句,之后在另一个数据库中执行这些SQL语句就OK了。
      

  4.   

    参考如下代码:
    Connection sourceConn = sourceDb.getJdbcConnection();
            Connection destinationConn = destinationDb.getJdbcConnection();
            ResultSet sourceRs = sourceConn.createStatement().executeQuery(trans.getQuery());
            ResultSetMetaData sourceRsMeta = sourceRs.getMetaData();
            ResultSetMetaData destinationRsMeta = destinationConn.createStatement().executeQuery("SELECT * FROM \"" + trans.destinationTab + "\" WHERE 1 = 2").getMetaData();
            String insertSQL = "INSERT INTO \"" + trans.destinationTab + "\" VALUES(";
            int sourceColCount = sourceRsMeta.getColumnCount();
            int destColCount = destinationRsMeta.getColumnCount();
          
            if(sourceColCount != destColCount) {
                throw new SQLException("源表的字段数与目标表中的字段数不相等。");
            }
            for (int i = 0;i < destColCount;i++) {
                if(i == 0) {
                    insertSQL += "?";
                    continue;
                }
                insertSQL += ",?";
            }
            insertSQL += ")";              // create prepared statement
            PreparedStatement pStmt = destinationConn.prepareStatement(insertSQL);
            while(sourceRs.next()) {
                for(int i = 0; i < sourceColCount;i++) {
                    int sourceDataType = sourceRsMeta.getColumnType(i + 1);
                    ResultSetMetaData destRsMeta = destinationConn.createStatement().executeQuery("SELECT * FROM \"" + trans.destinationTab + "\" WHERE 1 = 2").getMetaData();
                    int destDataType = destRsMeta.getColumnType(i + 1);
                    if(sourceRs.getObject(i + 1) == null) {
                        pStmt.setNull(i + 1,destDataType);
                        continue;
                    }
                    switch(sourceDataType) {
                        case java.sql.Types.ARRAY:
                            //Debugger.println("java.sql.Types.ARRAY");
                            throw new java.sql.SQLException("不支持ARRAY数据类型");
                        case java.sql.Types.BIGINT:
                            //Debugger.println("java.sql.Types.BIGINT");
                            pStmt.setObject(i + 1,new Long(sourceRs.getLong(i + 1)),destDataType);
                            break;
                        case java.sql.Types.BINARY:
                            //Debugger.println("java.sql.Types.BINARY");
                            throw new java.sql.SQLException("不支持BINARY数据类型");
                        case java.sql.Types.BIT:
                            //Debugger.println("java.sql.Types.BIT");
                            pStmt.setObject(i + 1,new Byte(sourceRs.getByte(i + 1)),destDataType);
                            break;
                            //throw new java.sql.SQLException("type BIT not supported");
                        case java.sql.Types.BLOB:
                            //Debugger.println("java.sql.Types.BLOB");
                            throw new java.sql.SQLException("不支持BLOB数据类型");
                        case java.sql.Types.CHAR:
                            //Debugger.println("java.sql.Types.CHAR");
                            pStmt.setObject(i + 1,sourceRs.getString(i + 1),destDataType);
                            break;
                        case java.sql.Types.CLOB:
                            //Debugger.println("java.sql.Types.CLOB");
                            throw new java.sql.SQLException("不支持CLOB数据类型");
                        case java.sql.Types.DATE:
                            //Debugger.println("java.sql.Types.DATE");
                            pStmt.setObject(i + 1,sourceRs.getDate(i + 1),destDataType);
                            break;
                        case java.sql.Types.DECIMAL:
                            //Debugger.println("java.sql.Types.DECIMAL");
                            pStmt.setObject(i + 1,new Float(sourceRs.getFloat(i + 1)),destDataType);
                            break;
      

  5.   

    接上:
      case java.sql.Types.DISTINCT:
                            //Debugger.println("java.sql.Types.DISTINCT");
                            throw new java.sql.SQLException("不支持DISTINCT数据类型");
                        case java.sql.Types.DOUBLE:
                            //Debugger.println("java.sql.Types.DOUBLE");
                            pStmt.setObject(i + 1,new Double(sourceRs.getDouble(i + 1)),destDataType);
                            break;
                        case java.sql.Types.FLOAT:
                            //Debugger.println("java.sql.Types.FLOAT");
                            pStmt.setObject(i + 1,new Float(sourceRs.getFloat(i + 1)),destDataType);
                            break;
                        case java.sql.Types.INTEGER:
                            //Debugger.println("java.sql.Types.INTEGER");
                            pStmt.setObject(i + 1,new Integer(sourceRs.getInt(i + 1)),destDataType);
                            break;
                        case java.sql.Types.JAVA_OBJECT:
                            //Debugger.println("java.sql.Types.JAVA_OBJECT");
                            throw new java.sql.SQLException("不支持JAVA_OBJECT数据类型");
                        case java.sql.Types.LONGVARBINARY://image
                            if(destDataType != java.sql.Types.LONGVARBINARY) {
                             
                                throw new java.sql.SQLException("源为image类型,目标不为image");
                            }
                         
                            pStmt.setBytes(i + 1,sourceRs.getBytes(i + 1));
                            break;
                        case java.sql.Types.LONGVARCHAR://text
                            if(destDataType != java.sql.Types.LONGVARCHAR) {
                               
                                throw new java.sql.SQLException("源为text类型,目标不为text");
                            }
                          
                            pStmt.setBytes(i + 1,sourceRs.getBytes(i + 1));
                            break;
                        case java.sql.Types.NULL:
                  
                            throw new java.sql.SQLException("不支持NULL数据类型");
                        case java.sql.Types.NUMERIC:
               
                            pStmt.setObject(i + 1,new Integer(sourceRs.getInt(i + 1)),destDataType);
                            break;
                        case java.sql.Types.OTHER:
                    
                            throw new java.sql.SQLException("不支持OTHER数据类型");
                        case java.sql.Types.REAL:
                        
                            pStmt.setObject(i + 1,sourceRs.getBigDecimal(i + 1),destDataType);
                            break;
                        case java.sql.Types.REF:
                       
                            throw new java.sql.SQLException("不支持REF数据类型");
                        case java.sql.Types.SMALLINT:
                         
                            pStmt.setObject(i + 1,new Integer(sourceRs.getInt(i + 1)),destDataType);
                            break;
                        case java.sql.Types.STRUCT:
                         
                            throw new java.sql.SQLException("不支持STRUCT数据类型");
                        case java.sql.Types.TIME:
                      
                            pStmt.setObject(i + 1,sourceRs.getTime(i + 1),destDataType);
                            break;
                        case java.sql.Types.TIMESTAMP:
                        
                            pStmt.setObject(i + 1,sourceRs.getTimestamp(i + 1),destDataType);
                            break;
                        case java.sql.Types.TINYINT:
                    
                            pStmt.setObject(i + 1,new Short(sourceRs.getShort(i + 1)),destDataType);
                            break;
                        case java.sql.Types.VARBINARY:
      
                            throw new java.sql.SQLException("不支持VARBINARY数据类型");
                        case java.sql.Types.VARCHAR:
                            pStmt.setObject(i + 1,sourceRs.getString(i + 1),destDataType);
                            break;
                        default:
                            break;
                    }
                }
                pStmt.executeUpdate();
              
            }
       
      

  6.   

    我那么说是为了能做一个通过配置文件,在异构的数据库中进行数据传输。所以需要用到装载/卸载不同的driver。
    注:在同一个jvm中只允许一个jdbcdriver存在,所以只能动态的来切换。如果你只是为了达到数据备份的目的,完全可以使用数据库本身的导入/导出工具。