oracle数据库中数据导出到一个文本文件中,每一条记录的换行问题

时间:2021-03-04 23:21:05
我现在将oracle数据库中的表emplyee中的ID,NAME两个字段对应字段名以及数据内容导出到文本文件data_out.txt中,每一条记录都换行。用jdk1.4的javac编译后,用java命令运行,生成的文本数据内容中换行位置却出现小黑四方框,不是一条条显示的。用UltraEdit工具能看到正常打开的内容。不知道怎么样,正常打开文本后,显示的内容没有小黑四方框,能正确换行。谢谢!源代码如下:
import java.net.URL;
import java.sql.*;
import java.util.*;
import java.io.*;
/**
 * <p>Title: ExportData</p>
 * <p>Description: 在这里仅仅就某个表employee中数据进行导出,
 * 按照顺序存放入一个文本文件data_OUT.txt,询问换行问题</p>
 * <p>Copyright: Copyright (c) 2003</p>
 * <p>Company: </p>
 * @author mjl125@sohu.com
 * @version 1.0
 */

public    class exportdata11 {
 public static void main(String[] args) {
    Connection con;
    DatabaseMetaData dma;
    ResultSet results;
    String url = "jdbc:oracle:thin:@10.6.3.53:1521:ORCL";
    String uid = "dbu";
    String pwd = "dbudbu";
    String drive = "oracle.jdbc.driver.OracleDriver";

    String query = "select ID,NAME from employee";

    FileOutputStream out; // declare a file output object
    PrintStream p; // declare a print stream object

    try {
      //加载 JDBC-ODBC 桥驱动程序
      Class.forName(drive);
      //连接数据库
      con = DriverManager.getConnection(url, uid, pwd);
      Statement stmt = con.createStatement();
      //在dos中显示内容
      results = stmt.executeQuery(query);
      System.out.println(dumpResults(results));
      //输出数据到文本中
      results = stmt.executeQuery(query);
      out = new FileOutputStream("DATA_OUT.txt");
      p = new PrintStream(out);
      p.println(dumpResults(results));
      p.close();
    }
    catch (Exception e) {
      System.out.println(e);
    }
  }

  public static String dumpResults(ResultSet rs)
  {
      try
      {
        ResultSetMetaData rsmd = rs.getMetaData();
        int numberOfColumns = rsmd.getColumnCount();
        StringBuffer ret = new StringBuffer(500);
        //列名
        for (int i = 1; i <= numberOfColumns; i++)
        {
          String columnName = rsmd.getColumnName(i);
          ret.append(columnName + "\t" );
        }
        ret.append("\n");  //换行问题
        //列内容
        while (rs.next())
        {
          for (int i = 1; i <= numberOfColumns; i++){
             if (i == numberOfColumns) ret.append(rs.getString(i));
               else  ret.append(rs.getString(i) + "," );
          }
          ret.append("\n");//换行问题
        }
        return(ret.toString());
      }
      catch(Exception e)
      {
        return e.toString();
      }
    }
}




9 个解决方案

#1


oracle数据库中数据导出到一个文本文件中,每一条记录的换行问题,在线,急!

#2


我又搞定了,其实很简单。ret.append("\n")这个语句换为ret.append("\r\n")即可。

#3


晕。。。
\r是换行,\n是回车符

#4


可能换行与回车都要,才是我希望的结果吧!不好意思,曾经打搅了你!
不过也谢谢你跟贴!

#5


版主:
我这个问题已经可以结贴了,我该怎么结呢?
另外,本文代码包含了jdbc连接oracle数据库的方法,sql语句查询的结果保存到文本文件的方法,值得推荐大家,参考使用!

#6


不打扰,我也不是得到学习了嘛~
在这个帖子上面有个“管理”,那里结帖给分就行,
然后你可以把这个帖子提交到FAQ,我可以通过审核,这样大家就都能看到了~

#7


不行啊,自己不能给自己分,这个问题差不多是自问自答的阿,也想给你一点儿分,可不想都给你啊!~~

#8


public  String export_tk(String hsdw) throws  SQLException
   {
   String ret="";
   String m="";
   String s4="";
   int jls=0;
   String sql="";
   LinkSQL conn=new LinkSQL();
   ResultSet rs2;
   try{    
       String mysql="select sphm,gkbm_dm,ysjc_dm,yskm_dm,fzbz,sjze,nsrsbh,tkyy_dm,jm_dm,yhzh,yhdm  from sk_ttkyxh where gkhsbm_dm='"+hsdw+"'" ;    
       ResultSet rs=conn.executeQuery(mysql);
       while(rs!=null && rs.next()){
       ret="";
       ret=ret+rs.getString("sphm")+",";   //凭证编号
       ret=ret+"1111111111,";              //征收机关代码
       ret=ret+rs.getString("gkbm_dm")+",";//收款国库代码
       ret=ret+rs.getString("gkbm_dm")+",";//目的国库代码
       ret=ret+rs.getString("ysjc_dm")+",";//预算级次代码
       ret=ret+"1,";                       //预算种类编码
       ret=ret+rs.getString("yskm_dm")+",";//预算科目代码
       ret=ret+rs.getString("fzbz").trim()+",";//辅助标志
       ret=ret+rs.getString("tkyy_dm").trim()+",";//退库原因代码
       ret=ret+rs.getString("jm_dm").trim()+",";//退库依据
       ret=ret+"1111111111,";              //审批机关代码
       ret=ret+"0,";              //退库比例
       ret=ret+"0,";              //退库总额
       ret=ret+rs.getString("sjze")+",";//实缴总额
       ret=ret+"0,";//退回标志
       ret=ret+rs.getString("yhzh")+",";//收款帐号
       ret=ret+rs.getString("nsrsbh");//收款单位代码 
      
       m=m+ret+"\r\n";                        //一行明细 \r是换行,\n是回车符
       
       jls=jls+1;                                  //记录条数        
    }    
    //组包
   //1111111111,1606080000 ,1606080000 ,1111111111,410303001180022,2,,0,1,010106,134,170039.95

s4=s4+m;//明细

   }
   catch(SQLException ex)
   {
     System.out.println(ex.getMessage());
   }
   finally{conn.close();}
   return m;    
   }

#9


fuzhan820(fzd) 师兄挺对,现在有另外一个问题,怎么样把异常信息和结果信息传送到客户端,让客户浏览到结果,对有对的信息,错有错的信息。希望大家指导指导,谢谢!

#1


oracle数据库中数据导出到一个文本文件中,每一条记录的换行问题,在线,急!

#2


我又搞定了,其实很简单。ret.append("\n")这个语句换为ret.append("\r\n")即可。

#3


晕。。。
\r是换行,\n是回车符

#4


可能换行与回车都要,才是我希望的结果吧!不好意思,曾经打搅了你!
不过也谢谢你跟贴!

#5


版主:
我这个问题已经可以结贴了,我该怎么结呢?
另外,本文代码包含了jdbc连接oracle数据库的方法,sql语句查询的结果保存到文本文件的方法,值得推荐大家,参考使用!

#6


不打扰,我也不是得到学习了嘛~
在这个帖子上面有个“管理”,那里结帖给分就行,
然后你可以把这个帖子提交到FAQ,我可以通过审核,这样大家就都能看到了~

#7


不行啊,自己不能给自己分,这个问题差不多是自问自答的阿,也想给你一点儿分,可不想都给你啊!~~

#8


public  String export_tk(String hsdw) throws  SQLException
   {
   String ret="";
   String m="";
   String s4="";
   int jls=0;
   String sql="";
   LinkSQL conn=new LinkSQL();
   ResultSet rs2;
   try{    
       String mysql="select sphm,gkbm_dm,ysjc_dm,yskm_dm,fzbz,sjze,nsrsbh,tkyy_dm,jm_dm,yhzh,yhdm  from sk_ttkyxh where gkhsbm_dm='"+hsdw+"'" ;    
       ResultSet rs=conn.executeQuery(mysql);
       while(rs!=null && rs.next()){
       ret="";
       ret=ret+rs.getString("sphm")+",";   //凭证编号
       ret=ret+"1111111111,";              //征收机关代码
       ret=ret+rs.getString("gkbm_dm")+",";//收款国库代码
       ret=ret+rs.getString("gkbm_dm")+",";//目的国库代码
       ret=ret+rs.getString("ysjc_dm")+",";//预算级次代码
       ret=ret+"1,";                       //预算种类编码
       ret=ret+rs.getString("yskm_dm")+",";//预算科目代码
       ret=ret+rs.getString("fzbz").trim()+",";//辅助标志
       ret=ret+rs.getString("tkyy_dm").trim()+",";//退库原因代码
       ret=ret+rs.getString("jm_dm").trim()+",";//退库依据
       ret=ret+"1111111111,";              //审批机关代码
       ret=ret+"0,";              //退库比例
       ret=ret+"0,";              //退库总额
       ret=ret+rs.getString("sjze")+",";//实缴总额
       ret=ret+"0,";//退回标志
       ret=ret+rs.getString("yhzh")+",";//收款帐号
       ret=ret+rs.getString("nsrsbh");//收款单位代码 
      
       m=m+ret+"\r\n";                        //一行明细 \r是换行,\n是回车符
       
       jls=jls+1;                                  //记录条数        
    }    
    //组包
   //1111111111,1606080000 ,1606080000 ,1111111111,410303001180022,2,,0,1,010106,134,170039.95

s4=s4+m;//明细

   }
   catch(SQLException ex)
   {
     System.out.println(ex.getMessage());
   }
   finally{conn.close();}
   return m;    
   }

#9


fuzhan820(fzd) 师兄挺对,现在有另外一个问题,怎么样把异常信息和结果信息传送到客户端,让客户浏览到结果,对有对的信息,错有错的信息。希望大家指导指导,谢谢!