SQL

  public static boolean expToMssqlScripts(DatabaseInfo dbInfo, String dbName, String[] tableNames, String path, String[] fileNames)
    {
        int isSucceed = 0;

        int tableNum = tableNames.length;
        for(int i = 0; i < tableNum; i++)
        {
            isSucceed = isSucceed + 1;
            expToMssqlScript(dbInfo, dbName, tableNames[i], path, fileNames[i]);
        }
        if(isSucceed == tableNum)
        {
            return true;
        }
        else
        {
            return false;
        }
    }
    /**
     * 将一个数据表导出到脚本
     *
     * @param dbName
     * @param tableName
     * @param fileName
     * @return
     */
    public static boolean expToMssqlScript(DatabaseInfo dbInfo, String dbName, String tableName, String path, String fileName)// throws SQLException
    {
        boolean isSucceed = false;
        Vector columns = null;
        try
        {
            columns = DBManagerHandler.getColumnInfos(dbInfo, dbName, tableName);
        }
        catch(FIException e1)
        {
            // TODO 自动生成 catch 块
            e1.printStackTrace();
        }
        Vector values = null;
        try
        {
            values = DBManagerHandler.getAllValues(dbInfo, dbName, tableName);
        }
        catch(FIException e1)
        {
            // TODO 自动生成 catch 块
            e1.printStackTrace();
        }
        int thousandflag = 0;

        // 换行符
        final String LINE_SEP = System.getProperty("line.separator");

        // 要执行的语句
        StringBuffer sqlStr = new StringBuffer();
        // 选择数据库
        sqlStr.append("use[" + dbName + "]" + LINE_SEP);
        sqlStr.append("delete from ").append(tableName).append(";").append(LINE_SEP);
        // 插入语句
        StringBuffer insertStr = new StringBuffer("insert into " + tableName + "(");
        //没有获得列信息,说明获取列信息失败,返回false 代表导出脚本不成功,否则继续获取列中的数据,写sql脚本
        int columnNum = 0;
        if(columns == null)
        {
            return false;
        }
        else
        {
            columnNum = columns.size();
        }
        for(int columnIndex = 0; columnIndex < columnNum; columnIndex++)
        {
            String[] columnInfo = (String[]) columns.get(columnIndex);
            insertStr.append(columnInfo[0] + ",");
        }
        insertStr.deleteCharAt(insertStr.length() - 1).append(") values(");

        // 当返回有值时才开始写脚本,防止抛出空指针异常
        if(values != null)
        {
            int recNum = values.size();
            for(int recIndex = 0; recIndex < recNum; recIndex++)
            {
                sqlStr.append(insertStr);
                Vector rec = (Vector) values.get(recIndex);
                for(int columnIndex = 0; columnIndex < columnNum; columnIndex++)
                {

                    // 将sql中的单引号' 替换成双引号 ''符号&就不用替换成‘||chr(38)||’
                    String value = (String) rec.get(columnIndex);
                    if( value!= null)
                    {
                        //防止value的值为null时抛出null异常
                        value = ToolBox.replaceString(value, "'", "''");
                    }
                    sqlStr.append("'").append(value).append("',");
                }
                sqlStr.deleteCharAt(sqlStr.length() - 1);
                sqlStr.append(");").append(LINE_SEP);// 每一行以分号结尾
                thousandflag = thousandflag + 1;
                if(thousandflag == 1000)
                {
                    sqlStr.append("GO").append(LINE_SEP);// 每1000行插入一个GO语句,并在脚本的最后加一个GO语句
                }
            }
            sqlStr.append("GO").append(LINE_SEP);// 每1000行插入一个GO语句,并在脚本的最后加一个GO语句
      //      dMsg.debug(sqlStr);
        }
        // 创建脚本文件
        File sqlFile = null;
        FileWriter writer = null;

        try
        {
            sqlFile = new File(path + System.getProperty("file.separator") + fileName);
            //处理文件名的后缀问题
            sqlFile = ToolBox.getSqlFile(sqlFile);
            if(sqlFile.exists())
            {
                sqlFile.delete();
            }
            sqlFile.createNewFile();
            writer = new FileWriter(sqlFile);
            writer.write(sqlStr.toString());
            isSucceed = true;
        }
        catch(IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try
            {
                writer.close();
            }
            catch(IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return isSucceed;
    }

    public static boolean expToOracleScripts(DatabaseInfo dbInfo, String dbName, String[] tableNames, String path, String[] fileNames)
    {
        int isSucceed = 0;

            int tableNum = tableNames.length;
            for(int i = 0; i < tableNum; i++)
            {
                isSucceed = isSucceed +1;
                expToOracleScript(dbInfo, dbName, tableNames[i], path, fileNames[i]);
               
            }
            if (isSucceed == tableNum)
            {
                return true;
            }
            else
            {
                return false;
            }
         
   
    }

    /**
     * 将一个数据表导出到脚本
     *
     * @param dbName
     * @param tableName
     * @param fileName
     * @return
     * @throws SQLException
     */
    public static boolean expToOracleScript(DatabaseInfo dbInfo, String dbName, String tableName, String path, String fileName)
        
    {
        boolean isSucceed = false;
        Vector columns = null;
        try
        {
            columns = DBManagerHandler.getColumnInfos(dbInfo, dbName, tableName);
        }
        catch(FIException e1)
        {
            // TODO 自动生成 catch块
            e1.printStackTrace();
        }
        Vector values = null;
        try
        {
            values = DBManagerHandler.getAllValues(dbInfo, dbName, tableName);
        }
        catch(FIException e1)
        {
            // TODO 自动生成 catch 块
            e1.printStackTrace();
        }
        int thousandflag = 0;

        // 换行符
        final String LINE_SEP = System.getProperty("line.separator");

        // 要执行的语句
        StringBuffer sqlStr = new StringBuffer();
        sqlStr.append("delete from ").append(dbName).append(".").append(tableName).append(";").append(LINE_SEP);

        // 插入语句
        StringBuffer insertStr = new StringBuffer("insert into " + dbName + "." + tableName + "(");

        // 没有获得列信息,说明获取列信息失败,返回false 代表导出脚本不成功,否则继续获取列中的数据,写sql脚本
        int columnNum = 0;
        if(columns == null)
        {
            return false;
        }
        else
        {
            columnNum = columns.size();
        }

        for(int columnIndex = 0; columnIndex < columnNum; columnIndex++)
        {
            String[] columnInfo = (String[]) columns.get(columnIndex);
            insertStr.append(columnInfo[0] + ",");
        }
        insertStr.deleteCharAt(insertStr.length() - 1).append(") values(");
        // 当返回有值时才开始写脚本,防止抛出空指针异常
        if(values != null)
        {
            int recNum = values.size();

            for(int recIndex = 0; recIndex < recNum; recIndex++)
            {
                sqlStr.append(insertStr);
                Vector rec = (Vector) values.get(recIndex);
                for(int columnIndex = 0; columnIndex < columnNum; columnIndex++)
                {
                    // 将ORACLE中的值&在脚本中替换成‘||chr(38)||’ 单引号' 替换成双引号 ''
                    String value = (String) rec.get(columnIndex);
                    if( value!= null)
                    {
                        // 下面两句话的顺序不能颠倒
                  
                    value = ToolBox.replaceString(value, "'", "''");
                    value = ToolBox.replaceString(value, "&", "'||chr(38)||'");
                    }
                    sqlStr.append("'").append(value).append("'").append(",");
                }
                sqlStr.deleteCharAt(sqlStr.length() - 1);

                sqlStr.append(");").append(LINE_SEP);
                thousandflag = thousandflag + 1;
                if(thousandflag == 1000)
                {
                    // 每1000行插入一个commit语句,并在脚本的最后加一个commit语句
                    sqlStr.append("commit;").append(LINE_SEP);
                }
            }
            // 在脚本的最后加一个commit语句
            sqlStr.append("commit;").append(LINE_SEP);
            dMsg.debug(sqlStr);
        }

        // 创建脚本文件
        File sqlFile = null;
        FileWriter writer = null;

        try
        {
            sqlFile = new File(path + System.getProperty("file.separator") + fileName);
            //处理文件后缀名问题
            sqlFile = ToolBox.getSqlFile(sqlFile);
            if(sqlFile.exists())
            {
                sqlFile.delete();
            }
            sqlFile.createNewFile();
            writer = new FileWriter(sqlFile);
            writer.write(sqlStr.toString());
            isSucceed = true;
        }
        catch(IOException e)
        {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        finally
        {
            try
            {
                writer.close();
            }
            catch(IOException e)
            {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return isSucceed;
    }

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值