使用ApachePOI将结果集从Java数据库导出到Excel
帮助我在这个从结果集导出到excel的项目上遇到了困难。以前的解决方案没有回答我的问题,但它们对我有帮助。这是我的代码,到目前为止,它只在数据库中显示了一行。 我的代码使用ApachePOI将结果集从Java数据库导出到Excel,java,apache-poi,resultset,Java,Apache Poi,Resultset,帮助我在这个从结果集导出到excel的项目上遇到了困难。以前的解决方案没有回答我的问题,但它们对我有帮助。这是我的代码,到目前为止,它只在数据库中显示了一行。 我的代码 import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import
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();
}
啊,很难检查代码,在发布之前尝试格式化代码,关于查询,尝试类似的方法
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();
}
我们可以让for循环在getString中输入动态值吗?我尝试了这个,但无法获取准确的结果 我的代码: 公共静态无效字符串appDB { 列表标题值=新的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){}
}
上述问题得到解决
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){}
}
我建议另一种解决方案,利用lib。 看一看:
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
}
}
}
每次迭代ResultSet对象后,您在何处创建新行?更好的是,您在第0行创建标题,并开始在while循环中创建行,使用X进行迭代。您在excel工作表中看到了什么?您可以使用java程序访问该位置吗?您可以共享您在excel工作表中获得的内容吗?如果可能,也可以使用pl请适当格式化您的上述代码。我可以在Excel上看到数据库中的一行,但有点晚了,但请查看MemPOI以备将来使用。谢谢各位,这是我第一次发布问题,所以我不习惯格式化。谢谢,它工作得很好。谢谢M.sharma,您是一位非常友好的人。我不介意您的同事ntacts…请你解释一下short在代码中的作用是什么基本的兄弟只要阅读poi文档,看看代码中使用的类和方法,顺便说一句,如果你得到了你问题的答案,你可以通过在答案附近的正确符号上打勾来接受它作为你的答案。