2012-03-20 53 views
0

我需要Java代碼以CSV格式下載數據庫中的特定行。我正在使用Netbeans IDE和Structs。從數據庫中下載特定的行作爲struts中的csv文件

我用下面的代碼在我的動作類:

else if (mode.equalsIgnoreCase("download")) 
{ 
    if(null !=request.getParameter("batchid")){ 
     batch_id=request.getParameter("batchid"); 
    } 
    UploadVO uploadvo= new UploadVO();   
     filetype = uploadform.getFiletype(); 
     filename = uploadform.getFilename(); 
    try{ 
     String sqls = "select ROW_NUMBER() over(order by id) as row,trx_batch_id,account_id," 
        + "(select name from [user] where id=tt.user_id) as Uploadedby,(SELECT CONVERT(VARCHAR(10),GETDATE(),101)) as date_of_transaction," 
        + "amount,(select description from [_transaction_type] where type=tt.type) as type,note,reverse_transaction_id from" 
        + " [transaction] tt "+ "where trx_batch_id= '" +batch_id+ "'" ; 

      Statement stmts = con.createStatement(); 

      ResultSet rss = stmts.executeQuery(sqls); 
      while (rss.next()) { 

      byte[] ba; 
      Blob b = rss.getBlob("content"); 
      ba = b.getBytes(1, (int) b.length()); 
      uploadvo.setDocfile(ba); 
      } 
    } 
    catch(Exception e){ 

    } 
    if (filetype.trim().equalsIgnoreCase("text/plain")) { 
     response.setContentType("text/plain"); 
    } else if (filetype.trim().equalsIgnoreCase("application/ms-doc")) { 
     response.setContentType("application/ms-doc"); 
    } else if (filetype.trim().equalsIgnoreCase("application/ms-excel")) { 
     response.setContentType("application/ms-excel"); 
    } else if (filetype.trim().equalsIgnoreCase("pdf")) { 
     response.setContentType("application/pdf"); 
    } else if (filetype.trim().equalsIgnoreCase("ppt")) { 
     response.setContentType("application/ppt"); 
    } else if (filetype.trim().equalsIgnoreCase("application/vnd.ms-excel")) { 
     response.setContentType("application/vnd.ms-excel"); 
    } else if (filetype.trim().equalsIgnoreCase("image/jpeg")) { 
     response.setContentType("image/jpeg"); 
    } else { 
     response.setContentType("application/octet-stream"); 
    } 


    String disHeader = "Attachment; Filename= " + filename + ""; 
    System.out.println(disHeader); 
    response.setHeader("Content-Disposition", disHeader); 
    response.setHeader("cache-control", "no-cache"); 

    ServletOutputStream outs = response.getOutputStream(); 
    outs.write(uploadvo.getDocfile()); 
    outs.flush(); 
    outs.close(); 
    return mapping.findForward("success"); 

} 

,但我得到一個空指針異常。

+1

請包括對'NullPointerException'堆棧跟蹤 - 它會告訴你的行號上發生了錯誤,將幫助人們回答你更容易提出質疑。 – 2012-03-20 09:48:06

回答

0

你打電話給fileType.trim()而不檢查它是否爲空。

你沒有要求的東西,但應該提及。

阿帕奇共同性有一類StringUtils的該檢查是巨大的,如果字符串是空的, 所以不是寫

if (null !=request.getParameter("batchid")) 

你會寫

if (StringUtils.isNotEmpty(request.getParameter("batchid")) 

既然你在可能感興趣知道它是否包含空間。

此外,您

else if (mode.equalsIgnoreCase("download")) 

表明你在mode切換(這我不知道,如果你已經檢查null其一)。在支柱1.x中,你可以使用DispatchAction在您指定的參數,則如模式,這將是一個方法的名稱叫,所以在你的榜樣,你會實現一個方法

public ActionForward download(...) { 
... 
} 

這將是當時稱爲"download".equals(request.getParameter("mode")

還要注意,寫"download".equals(request.getParameter("mode")而不是request.getParameter("mode").equals("download")從潛在的空指針爲您節省

+0

感謝您的幫助... – Rocker 2012-03-20 11:02:07