package com.webcrawl.db;
import java.lang.reflect.Field;
import java.lang.reflect.Method;
import java.sql.Connection;
import java.sql.Date;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.text.SimpleDateFormat;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import com.webcrawl.po.PostbaiduPo;
import com.webcrawl.po.TaskPo;
import com.webcrawl.server.Page;
public class DBUtil {
private static Connection con = null;
private static String driver = "com.mysql.jdbc.Driver";
public DBUtil() {
}
public static Connection getConnection() {
try {
Class.forName(driver);
con = DriverManager.getConnection("jdbc:mysql://localhost/webinfocrawl?user=root&password=root&useUnicode=true&characterEncoding=utf-8");
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
return con;
}
public static void close(ResultSet rs) {
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
public static void close(PreparedStatement pstmt) {
try {
if (pstmt != null)
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* @param con
*/
public static void close(Connection con) {
try {
if (con != null)
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 执行增加,更新,删除SQL语句
*
* @param sql
* SQL语句
* @param args
* SQL语句中参数的值
* @return DDL返回0,DML返回影响的行数
* @throws SQLException
*/
public static int executeUpdate(String sql, Object... args) {
int affect = 0;
PreparedStatement pstmt = null;
try {
pstmt = getConnection().prepareStatement(sql);
for (int i = 0; i < args.length; i++)
pstmt.setObject(i + 1, args[i]);
affect = pstmt.executeUpdate();
} catch (SQLException e1) {
e1.printStackTrace();
}finally {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return affect;
}
public static int executeUpdate(String sql, List args) {
int affect = 0;
PreparedStatement pstmt = null;
try {
pstmt = getConnection().prepareStatement(sql);
for (int i = 0; i < args.size(); i++)
pstmt.setObject(i + 1, args.get(i));
affect = pstmt.executeUpdate();
} catch (SQLException e1) {
e1.printStackTrace();
}finally {
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return affect;
}
/**
* 执行查询SQL语句
*
* @param sql
* SQL语句
* @param args
* SQL语句中参数的值
* @throws SQLException
*/
public static List<Map<Integer, Object>> executeQuery(String sql,
Connection conn, Object... args) {
List<Map<Integer, Object>> results = null;
PreparedStatement pstmt = null;
ResultSet rs = null;
try {
pstmt = conn.prepareStatement(sql);
for (int i = 0; i < args.length; i++)
pstmt.setObject(i + 1, args[i]);
rs = pstmt.executeQuery();
results = new ArrayList<Map<Integer, Object>>();
ResultSetMetaData rsmd = rs.getMetaData();
while (rs.next()) {
Map<Integer, Object> map = new HashMap<Integer, Object>();
for (int i = 1; i <= rsmd.getColumnCount(); i++)
map.put(i, rs.getObject(i));
results.add(map);
}
} catch (SQLException e1) {
e1.printStackTrace();
}finally {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
try {
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return results;
}
/**
* 根据某个字段查找其他字段
* @param tableName
* @param queryFieldName
* @param fieldName
* @param fieldValue
* @return
*/
public static Object executeQueryByField( String tableName ,String queryFieldName, String fieldName,Object fieldValue ){
String sql = " select "+queryFieldName+" from "+tableName+" where "+fieldName+" = '"+fieldValue+"'";
System.out.println(sql);
PreparedStatement pstmt = null;
ResultSet rs = null;
Object result = null;
try {
pstmt = getConnection().prepareStatement(sql);
rs = pstmt.executeQuery();
if( rs.next() ){
result = rs.getObject(1);
}
} catch (SQLException e) {
e.printStackTrace();
}finally{
try {
rs.close();
pstmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
return result;
}
/**
*
* 封装查询方法 finally语句中已关闭
*
* @param sql
* SQL语句
* @param POClass
* 对象模板
* @param preparedParam
* 参数集合
* @return 对象集合时
* @throws Exception
*/
@SuppressWarnings("unchecked")
public static List executeQuery(String sql, Class POClass,
List preparedParam) throws Exception {
List list = new ArrayList<Object>();
Field[] field = POClass.getDeclaredFields();
PreparedStatement ps = getConnection().prepareStatement(sql);
ResultSet rs = null;
if (preparedParam != null) {
for (int i = 0; i < preparedParam.size(); i++) {
ps.setObject(i + 1, preparedParam.get(i));
}
}
rs = ps.executeQuery();
while (rs.next()) {
Object o = POClass.newInstance();
for (Field f : field) {
String fieldName = f.getName();
String methodName = "set"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
Class c = f.getType();
Method method = POClass.getMethod(methodName, c);
Object result = rs.getObject(fieldName);
method.invoke(o, result);
}
list.add(o);
}
return list;
}
public static Object executeQueryByField(String sql, Class POClass,
Object preparedParam) throws Exception {
Field[] field = POClass.getDeclaredFields();
PreparedStatement ps = getConnection().prepareStatement(sql);
ResultSet rs = null;
if (preparedParam != null) {
ps.setObject(1, preparedParam);
}
rs = ps.executeQuery();
Object o = POClass.newInstance();
while (rs.next()) {
for (Field f : field) {
String fieldName = f.getName();
String methodName = "set"
+ fieldName.substring(0, 1).toUpperCase()
+ fieldName.substring(1);
Class c = f.getType();
Method method = POClass.getMethod(methodName, c);
Object result = rs.getObject(fieldName);
method.invoke(o, result);
}
}
return o;
}
@SuppressWarnings("unchecked")
public static ArrayList select(String sql, Class POClass, Object[] args,
Connection conn) throws Exception {
ArrayList paralist = new ArrayList();
PreparedStatement ps = conn.prepareStatement(sql);
ResultSet rs = null;
if (args != null) {
for (int i = 0; i < args.length; i++) {
ps.setObject(i + 1, args[i]);
}
}
rs = ps.executeQuery();
Object c1 = null;
ResultSetMetaData rsmd = rs.getMetaData();
int columnCount = rsmd.getColumnCount();
Method[] m = POClass.getMethods();// 得到PO中方法数组;
while (rs.next()) {
c1 = POClass.newInstance();
for (int i = 0; i < columnCount; i++) {
String columnName = rsmd.getColumnName(i + 1);
String columnToMethodName = getSetMethodName(columnName);
for (Method e : m) {
String methodName = e.getName();// 得到方法名
Class[] paramType = e.getParameterTypes();
//
if (methodName.equals(columnToMethodName)
&& paramType.length == 1) {
String type = paramType[0].getName();
if (type.equals("java.lang.String"))// 判断参数类型
e.invoke(c1, new Ob
没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
网络信息采集系统采用struts2+JDBC方式实现,这是个人写的一个简单列子,网页并未进行优化,具体实现指定网页进行信息抓取功能,支持多页抓取、多模块抓取,此系统只是简单的功能尝试,很多不足请大家原谅。 该系统开发工具为MyEclipse8.0,大家将下载包解压后直接导入到MyEclipse8.0即可。 纯为学习系统!
资源推荐
资源详情
资源评论
收起资源包目录
webInfoCrawl.rar (85个子文件)
webInfoCrawl
src
com
webcrawl
server
InfoCrawl.java 4KB
DataPersistence.java 1KB
PageUtil.java 797B
Page.java 2KB
Test.java 287B
TestCrawl.java 1KB
Utensil.java 1KB
po
PostbaiduPo.java 918B
PositionPo.java 2KB
TaskPo.java 575B
DataBasePo.java 928B
ParameterPo.java 2KB
FieldPo.java 2KB
db
DBUtil.java 12KB
action
RemoveTaskAction.java 2KB
UpdateParamAction.java 1KB
ParameterConfigAction.java 4KB
UpdateTaskAction.java 1KB
FieldConfigAction.java 3KB
PositionConfigAction.java 3KB
DataBaseConfigAction.java 2KB
InfoCrawlAction.java 5KB
BasicConfigAction.java 2KB
IndexAction.java 2KB
UpdateFieldsAction.java 1KB
PageViewAction.java 2KB
struts.xml 4KB
.classpath 1014B
.mymetadata 310B
.settings
com.genuitec.eclipse.j2eedt.core.prefs 1KB
org.eclipse.wst.jsdt.ui.superType.container 49B
org.eclipse.core.resources.prefs 88B
org.eclipse.wst.jsdt.ui.superType.name 6B
.jsdtscope 500B
.myeclipse
.project 1KB
WebRoot
META-INF
MANIFEST.MF 39B
fieldUpdateListView.jsp 2KB
positionConfig.jsp 4KB
js
jquery-1.3.2.js 118KB
index.jsp 2KB
post_baidu_view.jsp 3KB
dataBaseConfig.jsp 3KB
fieldConfig.jsp 5KB
basicConfig.jsp 3KB
parameterConfig.jsp 6KB
result.jsp 1KB
error.jsp 950B
paramUpdateListView.jsp 2KB
success.jsp 848B
WEB-INF
classes
com
webcrawl
server
TestCrawl.class 1KB
PageUtil.class 2KB
InfoCrawl.class 4KB
DataPersistence.class 2KB
Page.class 1KB
Utensil.class 2KB
Test.class 834B
po
FieldPo.class 2KB
ParameterPo.class 2KB
DataBasePo.class 1KB
TaskPo.class 976B
PositionPo.class 2KB
PostbaiduPo.class 1KB
db
DBUtil.class 13KB
action
PositionConfigAction.class 4KB
UpdateParamAction.class 2KB
RemoveTaskAction.class 2KB
InfoCrawlAction.class 6KB
DataBaseConfigAction.class 3KB
FieldConfigAction.class 4KB
UpdateTaskAction.class 2KB
ParameterConfigAction.class 4KB
PageViewAction.class 3KB
BasicConfigAction.class 3KB
IndexAction.class 3KB
UpdateFieldsAction.class 2KB
struts.xml 4KB
lib
commons-io-1.4.jar 106KB
mysql-connector-java-5.0.5-bin.jar 501KB
commons-fileupload-1.2.1.jar 56KB
commons-logging-1.0.4.jar 37KB
xwork-2.0.5.jar 447KB
freemarker-2.3.8.jar 784KB
struts2-core-2.0.11.2.jar 2.22MB
ognl-2.6.11.jar 164KB
web.xml 675B
共 85 条
- 1
ranji13
- 粉丝: 49
- 资源: 1
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功
- 1
- 2
- 3
前往页