有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

使用ApachePOI将结果集从Java数据库导出到Excel

我在将结果集导出到excel的项目中遇到了帮助。。以前的解决方案没有回答我的问题,但它们有帮助。。这是我的代码,到目前为止,它只在数据库中显示一行。 我的代码

import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.poi.hssf.usermodel.HSSFSheet;
import org.apache.poi.hssf.usermodel.HSSFWorkbook;
import org.apache.poi.ss.usermodel.*;


public class Plexada2 {


        public static void main(String[] args) {
        try {
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
         Connection conn = DriverManager.getConnection("jdbc:odbc:Storeway","root", "");
         Statement st = conn.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
         ResultSet rs = st.executeQuery("Select * from Storeway.order");

         HSSFWorkbook workbook = new HSSFWorkbook();
         HSSFSheet sheet = workbook.createSheet("lawix10");


         Row row = sheet.createRow(0);
         int x=0;
         while (rs.next()){
         String crate_id=  rs.getString(2);
         String content=rs.getString(3);
         String Order_type=  rs.getString(4);
         java.sql.Date date= rs.getDate(5);
         String datex= String.valueOf(date);

         row.createCell(0).setCellValue(crate_id);
         row.createCell(1).setCellValue(content);
         row.createCell(2).setCellValue(Order_type);
         row.createCell(3).setCellValue(datex); 

                }
         x+=1;  



        String yemi = "C:\\Users\\lawix10\\Desktop\\testlno9.xls";
        FileOutputStream fileOut;
        try {
             fileOut = new FileOutputStream(yemi);
             workbook.write(fileOut);
             fileOut.close();
                }

共 (4) 个答案

  1. # 1 楼答案

    我们可以让for循环在getString()中输入动态值吗?我试过了,但没有得到确切的结果

    我的代码: 公共静态void excel(字符串appDB) { List headerValues=new ArrayList()

        XSSFWorkbook workbook = new XSSFWorkbook();
        try {
        setConnection(appDB);
    
        String queryName="SELECT * FROM ALL_TABLES where table_name='table_name'";
    
        Reporter.addStepLog("----------------------------------- " + queryName.toUpperCase()
                + "\n - Validation Start" + " -----------------------------------");
        ps = con.prepareStatement(queryName, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
        rs = ps.executeQuery();
    
        Statement statement = con.createStatement();
        XSSFSheet spreadsheet = workbook.createSheet("employedb");
          ResultSet resultSet = statement.executeQuery("select * from all_tab_columns where table_name='table_name'"); 
          XSSFRow row = spreadsheet.createRow(0);
          XSSFCell cell;
          int cc=resultSet.getMetaData().getColumnCount();
          for(int i=1;i<=cc;i++)
          {
              String headerVal=resultSet.getMetaData().getColumnName(i);
              headerValues.add(headerVal);
              cell = row.createCell(i-1);
              cell.setCellValue(resultSet.getMetaData().getColumnName(i));
          }
          System.out.println(headerValues);
          int i = 1;
          while (resultSet.next())
          {  
              for(int j=1;j<=cc;j++)
              {  
              System.out.println(resultSet.getString(j));
              XSSFRow row1 = spreadsheet.createRow((short) i);
              row1.createCell((short) i).setCellValue(resultSet.getString(resultSet.getMetaData().getColumnName(j)));
              i++;
    
          }  
          }
    
          FileOutputStream out = new FileOutputStream(new File("S:\\Downloads\\excel.xlsx"));
          workbook.write(out);
          out.close();  
          System.out.println("exceldatabase.xlsx written successfully");
    
    }catch(Exception e){}
    }
    
  2. # 2 楼答案

    上述问题得到解决

    public static void excel(String appDB)
    {
        List<String> headerValues=new ArrayList<String>();
    
        XSSFWorkbook workbook = new XSSFWorkbook();
        try {
        setConnection(appDB);
    
        String queryName="SELECT * FROM ALL_TABLES where table_name='table_name";
    
        Reporter.addStepLog("----------------------------------- " + queryName.toUpperCase()
                + "\n - Validation Start" + " -----------------------------------");
        ps = con.prepareStatement(queryName, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_UPDATABLE);
        rs = ps.executeQuery();
    
        Statement statement = con.createStatement();
        XSSFSheet spreadsheet = workbook.createSheet("employedb");
          ResultSet resultSet = statement.executeQuery("select * from all_tab_columns where table_name='table_name'");
    
    
          XSSFRow row = spreadsheet.createRow(0);
          XSSFCell cell;
          int cc=resultSet.getMetaData().getColumnCount();
          for(int i=1;i<=cc;i++)
          {
              String headerVal=resultSet.getMetaData().getColumnName(i);
              headerValues.add(headerVal);
              cell = row.createCell(i-1);
              cell.setCellValue(resultSet.getMetaData().getColumnName(i));
          }
          System.out.println(headerValues);
    
          int i = 1;
          while (resultSet.next())
          {  
    
              XSSFRow row1 = spreadsheet.createRow((short) i);
              for(int p=0;p<headerValues.size();p++)
              {
              row1.createCell((short) p).setCellValue(resultSet.getString(headerValues.get(p)));
              }
              i++;
          } 
          FileOutputStream out = new FileOutputStream(new File("S:\\Downloads\\excel.xlsx"));
          workbook.write(out);
          out.close();  
          System.out.println("exceldatabase.xlsx written successfully");
    
    }catch(Exception e){}
    }
    
  3. # 3 楼答案

    我建议另一种解决方案,利用MemPOIlib。 看一看:

    public class Plexada2 {
    
        public static void main(String[] args) {
            try {
               Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
               Connection conn = DriverManager.getConnection("jdbc:odbc:Storeway","root", "");
               PreparedStatement prepStmt = conn.prepareStatement("Select * from Storeway.order");
    
               File fileDest = new File("C:\\Users\\lawix10\\Desktop\\testlno9.xls");
    
               new MempoiBuilder()
                    .setFile(fileDest)
                    .addMempoiSheet(new MempoiSheet(prepStmt))
                    .build()
                    .prepareMempoiReportToFile()
                    .get();
             } catch (Exception e) {
                // TODO manage exception
             }
        }
    }
    
  4. # 4 楼答案

    啊,很难检查代码,在发布之前尝试格式化代码,关于查询,尝试类似的方法

    try {
        Class.forName("driverName");
        Connection con = DriverManager.getConnection("url", "user", "pass");
        Statement st = con.createStatement();
        ResultSet rs = st.executeQuery("Select * from tablename");
        HSSFWorkbook workbook = new HSSFWorkbook();
        HSSFSheet sheet = workbook.createSheet("lawix10");
        HSSFRow rowhead = sheet.createRow((short) 0);
        rowhead.createCell((short) 0).setCellValue("CellHeadName1");
        rowhead.createCell((short) 1).setCellValue("CellHeadName2");
        rowhead.createCell((short) 2).setCellValue("CellHeadName3");
        int i = 1;
        while (rs.next()){
            HSSFRow row = sheet.createRow((short) i);
            row.createCell((short) 0).setCellValue(Integer.toString(rs.getInt("column1")));
            row.createCell((short) 1).setCellValue(rs.getString("column2"));
            row.createCell((short) 2).setCellValue(rs.getString("column3"));
            i++;
        }
        String yemi = "g:/test.xls";
        FileOutputStream fileOut = new FileOutputStream(yemi);
        workbook.write(fileOut);
        fileOut.close();
        } catch (ClassNotFoundException e1) {
           e1.printStackTrace();
        } catch (SQLException e1) {
            e1.printStackTrace();
        } catch (FileNotFoundException e1) {
            e1.printStackTrace();
        } catch (IOException e1) {
            e1.printStackTrace();
        }