时间:2014-8-11 作者:admin 分类: 摘自网络
导出路径最好写绝对路径
<%@ page language="java" import="java.util.*,java.sql.*,java.io.*" pageEncoding="utf-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <title>Jsp + MySQL</title> </head> <body> <%!public static class Tool { public static String strTab(String str, int num) {//补齐24位 int j = str.length(); if (str.length() < num) { for (int x = j; x < num; x++, j++) { str = str + " "; } } return str; } } public class Column { private String name; private String data; private String type; public Column() { } public Column(String name, String type) { this.name = name; this.type = type; } public void setName(String name) { this.name = name; } public void setType(String type) { this.type = type; } public void setDate(String date) { this.data = date; } public String getName() { return this.name; } public String getType() { return this.type; } public String getDate() { return this.data; } } public class Table { private String name; private List<Column> column = new ArrayList<Column>(); private String count; public void setCount(String count) { this.count = count; } public String getCount() { return this.count; } public Table() { } public Table(String name, String count) { this.name = name; this.count = count; } public void setName(String name) { this.name = name; } public String getName() { return this.name; } public void setColumn(List<Column> column) { this.column = column; } public List<Column> getColumn() { return this.column; } } /* 数据库连接类 */ public class DatabaseConnection { private Connection connection; private Statement statement; private ResultSet res; public DatabaseConnection(String url, String username, String password) { this.getConnection(url, username, password); } public Connection getConnection(String url, String username, String password) { try { Class.forName("org.gjt.mm.mysql.Driver"); this.connection = DriverManager.getConnection(url, username, password); } catch (Exception e) { e.printStackTrace(); } return this.connection; } public ResultSet execut(String sql) throws Exception { this.statement = this.connection.createStatement(); this.res = this.statement.executeQuery(sql); return this.res; } public void close() { if (this.connection != null) { try { this.connection.close(); } catch (SQLException e) { e.printStackTrace(); } } } }%> <% String submit = request.getParameter("submit"); String b = request.getParameter("b"); //标志位,是否是导出数据 if (submit == null || "".equals(submit)) { %> <form method="post" action="#"> database: <input type="text" value="" name="db" /> <br /> username: <input type="text" value="" name="username" /> <br /> password: <input type="text" value="" name="password" /> <br /> port: <input type="text" value="3306" name="port" /> <br /> <input type="submit" value="submit" name="submit" /> <br /> </form> <% } else if (b == null || "".equals(b)) { String db = request.getParameter("db"); String username = request.getParameter("username"); String password = request.getParameter("password"); String port = request.getParameter("port"); String url = "jdbc:mysql://localhost:" + port + "/" + db; //连接字符串 request.getSession().setAttribute("username", username); request.getSession().setAttribute("password", password); request.getSession().setAttribute("url", url); String sql = "select table_name from information_schema.TABLES where table_schema=(select DATABASE());"; //查出当前库所有表 DatabaseConnection dbc = new DatabaseConnection(url, username, password); ResultSet res = dbc.execut(sql); List<Table> table = new ArrayList<Table>(); //存放所有的表 while (res.next()) { String tablename = res.getString(1); String sqlcount = "select count(*) from " + tablename; ResultSet temp = dbc.execut(sqlcount); if (temp.next()) { sqlcount = temp.getString(1); } table.add(new Table(res.getString(1), sqlcount)); temp.close(); } res.close(); //关闭资源 for (Table t : table) { String tsql = "select COLUMN_NAME ,DATA_TYPE from information_schema.COLUMNS where TABLE_NAME='" + t.getName() + "'"; // 查询表结构 ResultSet tres = dbc.execut(tsql); while (tres.next()) { t.getColumn() .add( new Column(tres.getString(1), tres .getString(2))); } } request.setAttribute("table", table); res.close(); dbc.close(); for (Table t : table) { out.print("<div style=\"float:left;padding-left:30px\">"); out.print("+------------------------+<br/>"); out.print("|" + Tool.strTab( t.getName() + " ---> " + t.getCount(), 24) + "|<br/>"); out.print("+------------------------+<br/>"); out.print("| " + Tool.strTab("Column", 10) + "| " + Tool.strTab("Type", 11) + "|<br/>"); out.print("+-----------+------------+<br/>"); for (Column c : t.column) { out.print("| " + Tool.strTab(c.getName(), 10) + "| " + Tool.strTab(c.getType(), 11) + "|<br/>"); out.print("+-----------+------------+<br/>"); } out.print("</div>"); } %> <!-- 开始进行数据导出的HTML数据 --> <form method="post" action="#"> <br style="clear: left" /> <hr style="float: none" /> 表名: <input type="text" name="table" /> <br /> 列名: <input type="text" value="*" name="colums" /> 以逗号隔开(英文),默认为* <br /> 分行: <input type="text" value="5000" name="row" /> 每次查询多少条?默认每次5000条 <br /> <input type="hidden" name="b" value="b" /> 保存路径: <input type="text" value="" name="path" /> <br /> <input type="submit" value="开始导出" name="submit" /> </form> <% } else { String table = request.getParameter("table").trim(); String colums = request.getParameter("colums").trim(); String row = request.getParameter("row").trim(); String filePath = request.getParameter("path").trim(); String sql = "select " + colums + " from " + table; int index = 0; if (row == null || "".equals(row)) { index = 10000; //默认10000条每次 } else { index = Integer.parseInt(row); } String url = (String) request.getSession().getAttribute("url"); String username = (String) request.getSession().getAttribute( "username"); String password = (String) request.getSession().getAttribute( "password"); DatabaseConnection dbc = new DatabaseConnection(url, username, password); String sqlcount = "select count(*) from " + table; ResultSet res = dbc.execut(sqlcount); int count = 0; if (res.next()) { count = res.getInt(1); } res.close(); //开始执行SQL语句 //1、先进行判断是否是* ,如果是的话就进行查询表结构.. if (colums.trim().length() == 1) { String temp = "select COLUMN_NAME from information_schema.COLUMNS where TABLE_NAME='" + table + "'"; ResultSet tempr = dbc.execut(temp); colums =""; while (tempr.next()) { colums += tempr.getString(1) + ","; } tempr.close(); colums = colums.substring(0, colums.length() - 1); } String c[] = colums.split(","); //或去所有列 if(new File(filePath).exists()){ new File(filePath).delete(); //如果文件存在就删除.. } FileWriter fw = new FileWriter(filePath,true); for(String t:c){ fw.write(t+"\t\t"); } fw.write("\r\n"); fw.flush(); out.print("开始导出数据:共"+count+"条<br/>"); int j=0; for (int x = 0; x < count; x += index) { String rsql = "select " + colums + " from " + table + " limit " + x + "," + index; ResultSet rs = dbc.execut(rsql); while (rs.next()) { String tempdate = ""; for(String it : c){ // tempdate += rs.getString(it)+"\t"; //得到每条数据 try{ tempdate +=rs.getString(it)+"\t\t"; }catch(Exception e){ } } fw.write(tempdate+"\r\n"); j++; } if(j%10000==0){ out.print("正在导出 :"+j+"条<br/>"); out.flush(); } fw.flush(); } out.print("已导出 :"+j+"条<br/>"); out.print("导出完毕...Good !!"); fw.close(); dbc.close(); } %> </body> </html>