0

我正在尝试将数据从 mysql 数据库导出到 csv 文件,但我不明白。我有下一件事。

在jsp中我有这个:

<s:url id="fileDownload" namespace="/" action="download" ></s:url>
<a href="%{fileDownload}"><s:submit value="Exportar CSV" id="btn_exportar_csv" name="btn_exportar_csv" cssClass="botones" width="50px"></s:submit></a>

在struts文件中我有这个:

<action name="download" class="es.uniway.action.pedidos.ExportarFicherosAction">
<result name="success" type="stream">
  <param name="contentType">application/octet-stream</param>
  <param name="inputName">fileInputStream</param>
  <param name="contentDisposition">attachment;filename="fileABC.txt"</param>
  <param name="bufferSize">1024</param>
</result>

在行动中我有这个:

package es.uniway.action.pedidos;

import java.io.ByteArrayInputStream;
import java.io.FileWriter;
import java.io.IOException;
import java.io.InputStream;
import java.text.DateFormat;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.List;
import java.util.Map;

import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.axis.MessageContext;
import org.apache.struts2.interceptor.ServletRequestAware;

import Services.Web.CCIS.BasicHttpBinding_PublicApiServiceStub;
import Services.Web.CCIS.PublicApiService_PortType;

import com.opensymphony.xwork2.ActionContext;
import com.opensymphony.xwork2.ActionSupport;

import es.uniway.bean.TPedidosClientes;
import es.uniway.bean.TRespuestaPedidosClientes;
import es.uniway.bean.Tdatoscuentas;
import es.uniway.wscloud.WscloudImplServiceLocator;
import es.uniway.wscloud.WscloudImplSoapBindingStub;

public class ExportarFicherosAction extends ActionSupport implements ServletRequestAware{


Map session;
Tdatoscuentas [] datoscuentas;
private HttpServletRequest servletRequest;
private HttpServletResponse response;
TRespuestaPedidosClientes pedidosClientes;
TPedidosClientes [] pedClientes;
private List<Date> FechaAprobacion;
public boolean submit=false;
Date dateC=null;
Date dateI=new Date();
Date dateF=new Date();
Date date1=new Date();
Date date2= new Date();
Date []fechas= null;
Date []fechasI = null;
Date []fechasF = null;
private String cuentasID;
public String nuevaBusqueda;

@Override
public void setServletRequest(HttpServletRequest request) {
    // TODO Auto-generated method stub

}

@Override
public String execute() throws Exception {
    // TODO Auto-generated method stub

    response.setContentType("application/octet-stream");
    response.setHeader("Content-Disposition","attachment;filename=temp.csv");


    ServletOutputStream out = response.getOutputStream();



    java.net.URL portAddressCloud = new java.net.URL("http://localhost:8080/webServiceCloud2/services/WscloudImpl");

    WscloudImplServiceLocator wscloudServiceLocator = new WscloudImplServiceLocator();
      //WscloudImpl wscloud = wscloudServiceLocator.getWscloudImpl(portAddress);

      WscloudImplSoapBindingStub bsStubcloud=null;
      bsStubcloud=(WscloudImplSoapBindingStub) wscloudServiceLocator.getWscloudImpl(portAddressCloud);

    session = ActionContext.getContext().getSession();
    PublicApiService_PortType puerto=(PublicApiService_PortType) session.get("puerto");
    ((BasicHttpBinding_PublicApiServiceStub)puerto).setMaintainSession(true);
     MessageContext ctx=(MessageContext) session.get("contexto");
     session.put("date1", date1);
     session.put("date2", date2);
     String usuario=(String) session.get("usuario");
     System.out.println("Usuario es:"+usuario);
     String id_tipo_cuenta = (String) session.get("id_tipo_cuenta");
     String n_cuenta = (String) session.get("n_cuenta");
     System.out.println("El id_tipo_cuenta es:"+id_tipo_cuenta+" y el número de cuenta es:"+n_cuenta);
     Tdatoscuentas[] params=bsStubcloud.consultarCuentas(Integer.parseInt(id_tipo_cuenta),n_cuenta);
     System.out.println("Params es"+params.length);
     System.out.println("el id de params es:"+params[0].getId_cuenta());
     System.out.println("EL id de params de cuenta padre es:"+params[0].getId_cuenta_padre());
     session.put("params", params);
     int cliente=Integer.valueOf(servletRequest.getParameter("cuentasID").toString());

     if(cliente!=-1){

            String esquema=(String) session.get("Id_esquema_asociado_session");
            String proveedor=(String) session.get("Id_proveedor_cloud_session");

            System.out.println("El esquema es:"+esquema);
            System.out.println("El proveedor es:"+proveedor);
            System.out.println("La fecha es:"+servletRequest.getParameter("date1"));
            System.out.println("Esto es:"+servletRequest.getParameter("edt_pedido"));
            int nivel=Integer.valueOf(id_tipo_cuenta);
            int cuenta=Integer.valueOf(servletRequest.getParameter("cuentasID"));
            DateFormat formatter ; 
              Date date ; 
               formatter = new SimpleDateFormat("yyyy-MM-dd'T'HH:mm:ss");
               date = (Date)formatter.parse(servletRequest.getParameter("date1")); 
              Calendar cal=Calendar.getInstance();
              cal.setTime(date);
              System.out.println("Today is " +date );
              System.out.println("Today dos:"+cal.getTime());
              Date f_inicioAux=cal.getTime();
              Date date2 = (Date)formatter.parse(servletRequest.getParameter("date2")); 
              Calendar calF=Calendar.getInstance();
              cal.setTime(date2);
              System.out.println("Today is " +date.toString());




             pedidosClientes=bsStubcloud.consultarPedidosClientes(params[0].getId_cuenta_padre(), nivel, cuenta, cal, calF, 0, servletRequest.getParameter("edt_pedido").toString(),date.toString(),date2.toString());
             pedClientes=pedidosClientes.getDatosPedidosClientes();

             fechas= new Date[pedidosClientes.getDatosPedidosClientes().length];
             fechasI = new Date[pedidosClientes.getDatosPedidosClientes().length];
             fechasF = new Date[pedidosClientes.getDatosPedidosClientes().length];
             for(int i=0;i<pedidosClientes.getDatosPedidosClientes().length;i++){
                    System.out.println("iiiiiiiii"+pedidosClientes.getDatosPedidosClientes().length);
                    dateC=pedidosClientes.getDatosPedidosClientes()[i].getF_creacion().getTime();
                    dateI=pedidosClientes.getDatosPedidosClientes()[i].getF_inicio_contrato().getTime();
                    dateF=pedidosClientes.getDatosPedidosClientes()[i].getF_fin_contrato().getTime();

                    fechas[i]=dateC;
                    fechasI[i]=dateI;
                    fechasF[i]=dateF;
                    System.out.println(dateF);

                    //FechaAprobacion.add(dateC);
                 }


             setFechas(fechas);
             setFechasI(fechasI);
             setFechasF(fechasF);

             setPedClientes(pedClientes);

             System.out.println("Pedidos clientes ha devuelto:"+pedidosClientes.getDatosPedidosClientes().length);

             StringBuffer sb = exportar_CSV(pedClientes);
            //session.put("pedidos",pedidosClientes);

             InputStream in = 
                        new ByteArrayInputStream(sb.toString().getBytes("UTF-8"));

            byte[] outputByte = new byte[4096];
            //copy binary contect to output stream
            while(in.read(outputByte, 0, 4096) != -1)
            {
                out.write(outputByte, 0, 4096);
            }
            in.close();
            out.flush();
            out.close();

          }

          return "SUCCESS";
     }



     public HttpServletRequest getServletRequest() {
            return servletRequest;
        }

        public Tdatoscuentas[] getDatoscuentas() {
            return datoscuentas;
        }

        public void setDatoscuentas(Tdatoscuentas[] datoscuentas) {
            this.datoscuentas = datoscuentas;
        }

        public boolean isSubmit() {
            return submit;
        }

        public void setSubmit(boolean submit) {
            this.submit = submit;
        }

        public TRespuestaPedidosClientes getPedidosClientes() {
            return pedidosClientes;
        }

        public void setPedidosClientes(TRespuestaPedidosClientes pedidosClientes) {
            this.pedidosClientes = pedidosClientes;
        }

        public TPedidosClientes[] getPedClientes() {
            return pedClientes;
        }

        public void setPedClientes(TPedidosClientes[] pedClientes) {
            this.pedClientes = pedClientes;
        }



        public Date[] getFechas() {
            return fechas;
        }

        public void setFechas(Date[] fechas) {
            this.fechas = fechas;
        }

        public Date[] getFechasI() {
            return fechasI;
        }

        public void setFechasI(Date[] fechasI) {
            this.fechasI = fechasI;
        }

        public Date[] getFechasF() {
            return fechasF;
        }

        public void setFechasF(Date[] fechasF) {
            this.fechasF = fechasF;
        }

        public String getCuentasID() {
            return cuentasID;
        }

        public void setCuentasID(String cuentasID) {
            this.cuentasID = cuentasID;
        }

        public HttpServletResponse getResponse() {
            return response;
        }

        public void setResponse(HttpServletResponse response) {
            this.response = response;
        }

        public Date getDateI() {
            return new Date();
        }

        public void setDateI(Date dateI) {
            this.dateI = dateI;
        }

        public Date getDateF() {
            return new Date();
        }

        public void setDateF(Date dateF) {
            this.dateF = dateF;
        }

        public Date getDate1() {
            return date1;
        }

        public void setDate1(Date date1) {
            this.date1 = date1;
        }

        public Date getDate2() {
            return date2;
        }

        public void setDate2(Date date2) {
            this.date2 = date2;
        }

        public String getNuevaBusqueda() {
            return nuevaBusqueda;
        }

        public void setNuevaBusqueda(String nuevaBusqueda) {
            this.nuevaBusqueda = nuevaBusqueda;
        }



        private static StringBuffer exportar_CSV(TPedidosClientes[] pedClientes2) throws IOException {
            // TODO Auto-generated method stub



            StringBuffer writer = new StringBuffer();
                writer.append("NºPedido");
                writer.append(',');
                writer.append("Estado");
                writer.append(',');
                writer.append("Fecha_Pedido");
                writer.append(',');
                writer.append("Fecha_Inicio");
                writer.append(',');
                writer.append("Fecha_Final");
                writer.append(',');
                writer.append("PVP");
                writer.append(',');
                writer.append("Coste");
                writer.append('\n');

               for(int i=0;i<pedClientes2.length;i++){
                   writer.append(pedClientes2[i].getN_pedido());
                   writer.append(',');
                   writer.append(pedClientes2[i].getEstado_pedido());
                   writer.append(',');
                   writer.append(pedClientes2[i].getF_creacion().getTime().toString());
                   writer.append(',');
                   writer.append(pedClientes2[i].getF_inicio_contrato().getTime().toString());
                   writer.append(',');
                   writer.append(pedClientes2[i].getF_fin_contrato().getTime().toString());
                   writer.append(',');
                   writer.append(pedClientes2[i].getPvp().toString());
                   writer.append(',');
                   writer.append(pedClientes2[i].getP_coste().toString());



                   writer.append('\n');
               } 


               return writer;

        }

}

我在做什么坏事?非常感谢

4

2 回答 2

1

在您struts.xml声明inputName中,fileInputStream您必须在您的操作中使用它,private InputStream fileInputStream;并在执行方法中将文件放入其中。请参阅此链接,例如http://www.mkyong.com/struts2/struts-2-download-file-example/

于 2012-11-12T10:32:30.607 回答
0

您可以使用SELECT语句轻松完成。只需运行这样的命令 -

SELECT * FROM table INTO OUTFILE 'file name';
于 2012-11-12T08:14:35.350 回答