在线读取Mongodb数据库下载EXCEL文件
版本:Mongodb2.4.8
通过页面下载Excel文件
jsp
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <form method="post"> <a href="/Demo/DownDemo"><h2>下载</h2></a> </form> </body> </html>
Mongodb配置文件dbconfig.properties:
url=localhost port=27017 db=movie table=mv
连接Mongodb工具类:
package util; import java.io.IOException; import java.io.InputStream; import java.net.UnknownHostException; import java.util.Properties; import com.mongodb.DB; import com.mongodb.DBCollection; import com.mongodb.Mongo; import com.mongodb.MongoException; public class DBConn { private static String url; private static int port; private static String db; private static String table; // 初始化加载 static{ //加载 Properties p = new Properties(); InputStream input = DBConn.class.getClassLoader().getResourceAsStream("dbconfig.properties"); try { p.load(input); url = p.getProperty("url"); port = Integer.valueOf(p.getProperty("port")); db = p.getProperty("db"); table = p.getProperty("table"); } catch (IOException e) { e.printStackTrace(); }finally{ if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } } } /** * 获取连接mongodb * @Description: * @param @return * @return DBCollection 返回类型 */ public static DBCollection getConn(){ DBCollection conn = null; try { Mongo m = new Mongo(url,port); DB d = m.getDB(db); conn = d.getCollection(table); } catch (UnknownHostException e) { e.printStackTrace(); } catch (MongoException e) { e.printStackTrace(); } return conn; } /** * 关闭连接 * @Description: * @param @param m * @return void 返回类型 */ public static void getClose(Mongo m){ m.close(); } }
读取Mongodb数据写入到excel中:
public class WriteExcelUtils { /** * @Description:mongdb中读取数据写入到Excel * @param title * @param filename * @param rownum * @param cursor * @return void 返回类型 */ public static void Excel(DBCursor cursor,OutputStream out) { Workbook book = new HSSFWorkbook(); // 获取标题 DBObject ob = cursor.toArray().get(0); ArrayList<String> title = new ArrayList<>(); for(String key:ob.keySet()){ if (key.equals("_id")) { continue; } title.add(key); } // 创建sheet Sheet sheet = book.createSheet(); try { // 写入标题栏 Row row = null; // 标题栏的行数 Cell cell = null; for(int i = 0;i< (cursor.count() + 1);i++){ // 标题栏 if (i == 0) { row = sheet.createRow(i); for (int j = 0; j < title.size(); j++) { cell = row.createCell(j); // 设置标题栏 cell.setCellValue(title.get(j)); } continue; } // 写入数据 row = sheet.createRow(i); DBObject obj = null; for (int j = 0; j < title.size(); j++) { cell = row.createCell(j); obj = cursor.toArray().get(j); for(String key :obj.keySet()){ if (key.equals("_id")) { continue; } if (key.equals(title.get(j))) { cell.setCellValue((String)(obj.get(key))); } } } } // 写入到excel book.write(out); } catch (IOException e1) { e1.printStackTrace(); } finally { try { out.flush(); out.close(); } catch (IOException e) { e.printStackTrace(); } } } }
Servlet:
package servlet; import java.io.BufferedOutputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.OutputStream; import java.util.ArrayList; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import com.mongodb.DBCollection; import com.mongodb.DBCursor; import com.mongodb.DBObject; import util.DBConn; import util.WriteExcelUtils; /** * Servlet implementation class DownDemo */ @WebServlet("/DownDemo") public class DownDemo extends HttpServlet { private static final long serialVersionUID = 1L; /** * @see HttpServlet#HttpServlet() */ public DownDemo() { super(); // TODO Auto-generated constructor stub } /** * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) */ protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub doPost(request, response); } /** * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response) */ protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { // TODO Auto-generated method stub getMongodbExcle(request, response); } /** * 从mongdb中读取数据下载到客户端 * @Description: * @param request * @param response * @return void 返回类型 */ private void getMongodbExcle(HttpServletRequest request, HttpServletResponse response){ // 设置请求 response.setContentType("application/vnd.ms-excel;charset=UTF-8"); response.setHeader("Content-Disposition", "attachment;filename=data.xls"); // 从mongodb中读取数据 DBCollection conn = DBConn.getConn(); DBCursor cursor = conn.find(); OutputStream out = null; try { out = new BufferedOutputStream(response.getOutputStream()); } catch (IOException e) { e.printStackTrace(); } WriteExcelUtils.Excel(cursor,out); } }