Загрузите определенные строки из базы данных как CSV-файл в Struts - PullRequest
0 голосов
/ 20 марта 2012

Мне нужен код Java для загрузки определенных строк из базы данных в формате CSV.Я использую Netbeans IDE и Structs.

Я использовал следующий код в своем классе действий:

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 Ответ

0 голосов
/ 20 марта 2012

Вы звоните fileType.trim(), не проверяя, является ли он нулевым или нет.

Вещи, которые вы не просите, но должны быть упомянуты.

В Apache Commons есть класс StringUtils, который отлично подходит для проверки пустых строк, поэтому вместо написания

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

вы бы написали

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

Поскольку вам, вероятно, интересно узнать, содержит ли оно что-то, кроме пробелов.

Кроме того, ваш

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

указывает, что вы включаете mode (что я не уверен, если вы также проверили на null). В Struts 1.x вы можете использовать DispatchAction, в котором вы указываете параметр, например, mode, который будет именем вызываемого метода, поэтому в вашем примере вы реализуете метод

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

, который будет вызван, когда "download".equals(request.getParameter("mode").

Также обратите внимание, что запись "download".equals(request.getParameter("mode") вместо request.getParameter("mode").equals("download") спасает вас от потенциального нулевого указателя

...