|
保存路径的时候,最好写 绝对路径。
- <%@ 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>
复制代码
|
|