2012-03-20 10 views
0

データベースから特定の行をCSV形式でダウンロードするためのJavaコードが必要です。私は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"); 

} 

が、私は、nullポインタ例外を取得しています。

+1

'NullPointerException'のスタックトレースを含めてくださいというrequest.getParameter("mode").equals("download")より"download".equals(request.getParameter("mode")を書くことは可能性のヌル・ポインタからあなたを節約することに注意してください - それはあなたにエラーがで発生した行番号を教えてくれますし、人々がお答えしますあなたはもっと簡単に質問します。 –

答えて

0

fileType.trim()はヌルであるかどうかをチェックせずに電話しています。

あなたが求めるものではなく、言及する必要があります。あなたがおそらく興味を持っているので、あなたが

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

を書きたい

のApache Commonsのは、クラスの文字列が空であるかどうかをチェックするために偉大であるのStringUtils、 ので、代わりの

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

を書くことがあります空白以外のものが含まれているかどうかを知る。また

、あなたの

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

あなたは(私はあなたがnullのいずれかをチェックしてきたかはわからないもの)modeに切り替えていることを示しています。支柱1.xでは、あなたはあなたの例では、メソッドになり

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

を実装すると思いますので、呼び出されるメソッドの名前になりますPARAMTER、例えばモードを、指定したDispatchActionを使用することができます"download".equals(request.getParameter("mode")と呼ばれる。

はまた

+0

ウルの助けをありがとう... – Rocker

関連する問題