有没有什么好方法可以在没有rs.getString的情况下检索数据并以.xls或.csv格式保存?

时间:2018-06-25 11:51:52

标签: java oracle jsp

我正在一个应用程序上工作,我想以.xls格式下载表,表以.xls格式下载,但是我必须在while(rs.next())条件下给出列名,这是我不想要的,我想要不指定列名的数据应基于st.executeQuery()下载;反正有吗在这里我粘贴我的代码

<%@page contentType="text/html" pageEncoding="UTF-8"%>
<%@page import="java.sql.*"%>
<!DOCTYPE html>
<html>
    <head>
        <title>JSP Page</title>
    </head>
    <body>
        <form method="post" action="Download_excel.jsp">
          <table border="1">
              <tr>
                  <td>FILE_NAME</td>
                  <td>FILE_UPLOAD_DATE</td>
                  <td>POLICY_NO</td>
                  <td> ENDORSEMENT_NO</td>
                  <td> GP_EBAO</td>
                  <td> TOL_PRM</td>
                  <td> PRODUCT_NAME</td>
                  <td> POLICY_NUMBER</td>
                  <td> GP_OF</td>
                  <td>DIFF</td>

              </tr>
              <%


                  String txtfilename=request.getParameter("txtfilename");
                  String btnsubmit=request.getParameter("btnsubmit");
                     if(txtfilename==null ||txtfilename.trim().isEmpty())
       {
           out.println("<html><body><script type=\"text/javascript\">"); 
            out.println("confirm('first name field cannot be blank');"); 
            out.println("location='xlsUpload.html';");
            out.println("</script></body></html>"); 

       }
                     else
                          if(btnsubmit!=null)
                          {

                               response.setContentType("application/vnd.ms-excel");
response.setHeader("Content-Disposition", "attachment; filename="+txtfilename+".xls");
              Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection con=DriverManager.getConnection("jdbc:oracle:thin:@172.18.115.213:1821:db","xe","se");
        Statement st=con.createStatement();
        ResultSet rs=st.executeQuery("select * from DYNAMIC_INSERT where file_name='"+txtfilename+"'");

        while(rs.next())
        {


              %>
              <tr>

                  <td><%=rs.getString("FILE_NAME")%></td>


              <td><%=rs.getString("FILE_UPLOAD_DATE")%></td>

                  <td><%=rs.getString("POLICY_NO")%></td>

                  <td><%=rs.getString("ENDORSEMENT_NO")%></td>

                  <td><%=rs.getString("GP_EBAO")%></td>

                  <td><%=rs.getString("TOL_PRM")%></td>

                  <td><%=rs.getString("PRODUCT_NAME")%></td>

                  <td><%=rs.getString("POLICY_NUMBER")%></td>
                         <td><%=rs.getString("GP_OF")%></td>
                         <td><%=rs.getString("DIFF")%></td>
              </tr>

              <%
              }
}
              %>
          </table>
        </form>
    </body>
</html>

在这里我尝试下面的代码,但只检索列名而不是数据

 ResultSetMetaData rsmd = rs.getMetaData();

        int numOfCols = rsmd.getColumnCount();

        for(int i = 1; i <= numOfCols; i++)
        {
        %>
        <tr>
        <td>
           <%=rsmd.getColumnName(i))%>;
            </td>
            </tr>

        <%  
        }
        %>

1 个答案:

答案 0 :(得分:0)

是的,可以。你已经到一半了。
您可以为此使用ResultSetMetaData。

然后调用rs.getString传递列索引。 参见-> https://docs.oracle.com/javase/7/docs/api/java/sql/ResultSet.html#getString(int)

public static string GenerateUserToken<TUser, TKey>(this UserManager<TUser, TKey> manager, string purpose, TKey userId)
    where TUser : class, IUser<TKey>
    where TKey : IEquatable<TKey>;