将文档放到字符流中,发送到客户端时设置HTTP头信息,主要是MIME类型。你自己改相应的设置就可以了,以下是我用过的导出成Excel的。
Content-disposition:attachment;
Content-Type:application/vnd.ms-excel;charset=GB2312;
filename="xxxx.txt"

解决方案 »

  1.   

    JDBC没有现成的方法可以用,你必须自己写程序查询所有的表,然后一个一个的读取数据并拼凑成要求的输出格式http://www.javayou.com
      

  2.   

    http://www.javayou.com
    里面可以找到
      

  3.   

    没有明白j2nix(爱生活爱星辉) 的做法,能不能说详细点?不过我知道一种比较传统的方法是:对文件流进行操作,将数据库的记录一条条写到文件中,txt文件可以直接操作,对于.doc,.rft类型的文件,要使用专门的工具包.
      

  4.   

    对了,我说的就是txt类型的文件。此文件并非事先生成的,只管将内容作为字符“打印”在网页上,自动提示保存。
      

  5.   

    各位高人,能不能给个例子啊 我这个菜鸟看起来方便一点,要不发我邮箱里面也可以[email protected]
      

  6.   

    可以用sql语句来实现.
    EXEC master..xp_cmdshell 'bcp dbname..tablename out c:\DT.txt -c -Sservername -Usa -Ppassword'

    EXEC master..xp_cmdshell 'bcp "Select * from dbname..tablename" queryout c:\DT.txt -c -Sservername -Usa -Ppassword'现在sql客户端执行通过后在往页面写
      

  7.   

    还是没有弄出来啊 ,有没有高人给个bean的例子啊,重谢
      

  8.   

    写个Servlet小例子://HelloServlet.java
    import java.io.*;
    import java.util.*;
    import javax.servlet.http.*;
    import javax.servlet.*;public class HelloServlet extends HttpServlet

        public void doGet (HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException
        {
            res.setHeader("Content-disposition", "attachment");         //保存附件
            res.setHeader("Content-Type", "text/plain;charset=GB2312"); //附件内容        PrintWriter out = res.getWriter(); 
            out.println("这里就是文本文件的内容。");
            out.close(); 
        }
    }
      

  9.   

    这个怎样才能和我的jsp页面结合起来呢
      

  10.   

    /*
     * Created on 2004-11-24
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    package avs;
    import java.sql.Connection;
    import java.sql.DriverManager;
    import java.sql.SQLException;
    /*
     * Created on 2004-11-24
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     *//**
     * @author ROGER
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class DataBaseConnection 
    {
    private  static Connection con;
    public DataBaseConnection()
    {
    con=null;
    }
    public static Connection getConnection()
    {
    try 
    {
    Class.forName("com.microsoft.jdbc.sqlserver.SQLServerDriver");
    }
    catch(ClassNotFoundException e)
    {
    System.out.println("ClassNotFoundException ->"+e);
    }
    try
    {
    String url="jdbc:microsoft:sqlserver://192.168.199.100:1433;DatabaseName=mobile;user=sa;password=server" ;
    //con = DriverManager.getConnection(url,user,password);
    con = DriverManager.getConnection(url);
    }
    catch(SQLException e)
    {
    System.out.println("Connection DataBase Exception ->"+e);
    con=null;
    }
    return con;
    }
    public void setAutoCommit(boolean autoCommit) 
    {
    try
    {
    con.setAutoCommit(autoCommit);
    }
    catch (SQLException e)
    {
    System.out.println("setAutoCommit method exception ->"+e);
    }
    }
    public  void rollback() 
    {
    try
    {
    con.rollback();
    }
    catch (SQLException e)
    {
    System.out.println("rollback method exception ->"+e);
    }
    }
    public void  commit()  
    {
    try
    {
    con.commit();
    }
    catch (SQLException e)
    {
    System.out.println("commit method exception ->"+e);
    }
    }
    }
      

  11.   

    上面的是一个连接数据库的JavaBean,包名是avs,下面的是一个取数据到文件的JavaBean:
    /*
     * Created on 2004-12-7
     *
     * TODO To change the template for this generated file go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    package avs;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.io.PrintStream;
    import java.sql.Connection; 
    import java.sql.PreparedStatement;
    import java.sql.ResultSet;
    import java.sql.ResultSetMetaData;/**
     * @author roger
     *
     * TODO To change the template for this generated type comment go to
     * Window - Preferences - Java - Code Style - Code Templates
     */
    public class PrintData 
    {
    /**
     * 
     */
    private Connection con;
    private PreparedStatement pre;
    private ResultSet res;
    private ResultSetMetaData meta;
    private String[] column;
    private String sql; //这是要查询的SQL语句
    private PrintStream pr;
    private String FileName; //这是结果保存时的文件名,这个文件保存在和JSP页面同一个目录下面
    public PrintData() 
    {
    con=DataBaseConnection.getConnection();
    pre=null;
    res=null;
    meta=null;
    sql=null;
    FileName="result.txt";
    try 
    {
    pr=new PrintStream(new FileOutputStream(FileName));
    }
    catch(IOException e)
    {
    System.out.println("Create File Stream exception ->"+e);
    }
    }
    public void setSQL(String sql)
    {
    this.sql=sql;
    }
    public void setFileName(String name)
    {
    FileName=name;
    }
    public void getData()
    {
    try 
    {
    pre=con.prepareStatement(sql);
    res=pre.executeQuery() ;
    meta=res.getMetaData() ;
    int col=meta.getColumnCount() ;
    column=new String[col];
    for (int i=0;i<col;i++)
    {
    column[i]=meta.getColumnName(i+1) ;
    pr.print(meta.getColumnName(i+1)+"\t") ;
    }
    pr.print("\n") ;
    while (res.next())
    {
    String str="";
    for (int j=0;j<col;j++)
    str=str+res.getString(j+1)+"\t";
    /*
     * 假设这个表里面所有的列都是char类型的,这样做是为了方便这个例子的
     * 书写,如果不是的,那你要根据实际情况来调整每一列用哪个getXXX()的
     * 方法,比如说如果第二列是int类型的数据,那你在这个for循环中当i=2的
     * 时候,就要用getInt()这个方法来取得ResultSet中的值。
     */
    str=str+"\n";
    pr.print(str) ;//将数据写到文件中去,每次写一条记录
    pr.flush() ;
    }
    pr.close(); //流最后要关闭
    }
    catch(Exception e)
    {
    System.out.println("SQLException ->" +e);
    }
    }
    }
      

  12.   

    然后你在Jsp页面上只要用
    <jsp:useBean id="print" class="avs.PrintData" scope="page"/>
    <%
    print.setFileName("resutlset.txt");  //如果你想改成其它的名字,只要修改那个字符串参数就可以了
    print.setSQL("select * from company "); //这一句一定不能少,不然的话是没有数据的
    print.getData();//这句就完成了从数据库取数据到txt文件的过程
    %>
    现在完全给你解决了,是不是该给我加分了?哈哈
      

  13.   

    我把你给我的bean编译了一下,然后放到我的jrun的环境下面,然后在把你给我的代码添加到jsp页面上面,结果没有任何错误发生,但是也没有生成任何txt文件,不知道为什么啊,在bean中,我已经把连接数据库的部分改成连接到我的数据库上了,jsp中的setSQL()方法,我也只是查询那些为char的字段,但是还是没有任何错误提示,和任何事件发生,望高人指点,我愿意再加50分!
      

  14.   

    怎么可能什么都没有发生,你表里有没有数据?如果是程序的错误,会在控制台上打印出来的,因为所有的地方我都加了try--catch语句的。那个生成的txt文件是和你的JSP文件在同一个目录下面的。
      

  15.   

    你只要修改两个地方,首先在WEB-INF/classes下面建一个名为avs的文件夹,然后修改
    url="jdbc:microsoft:sqlserver://192.168.199.100:1433;DatabaseName=mobile;user=sa;password=server" ;print.setSQL("select * from company "); 这两句,改你的数据库的IP地址,数据库名,用户名,密码;
    传入的SQL语句;
    其余的东西都不需在改的。
      

  16.   

    我按照你的方法做的,都改过了,不过现在依旧,没有提示任何错误,也没有提示生成任何txt文档,bean我已经按照你给我方法改了,编译没有错误,表里面有数据,都是char类型的
      

  17.   

    若是能够执行的话,是不是应该弹出一个对话框,提示我要把这个txt文档保存到一个地方?不过现在什么提示操作也没有,目录下面也没有txt文档
      

  18.   

    drugon(personal),你好,我搞订了,不过还要麻烦你帮我说一下,在我的表中,for循环中当i=2和
    i=4的 时候,就要用getInt()这个方法来取得ResultSet中的值,我的表中有3个栏位都是int的,但是这个bean我不会写了,能给我指点一下么,老这么麻烦你真不好意思,先给你加分了,帮了我这么大的忙!万分感谢啊
      

  19.   

    如果一个表中各个字段全部不是一样的类型,那就用不着循环了,把那个for循环去掉,你把那个while循环改一下就可以了,如:
     while (res.next())
     {
        String name=res.getString("name");
        int age=res.getInt("age");
        Double salary=res.getDouble("salary");
        .......
     }
    就象这上面的一样,每一列你都写一个getXXX()方法,不用循环。只是要多写几个而己。