📄 getpagedata.java
字号:
/*程序功能:
*从特定格式的网页中提取所需要的数据并将其保存到数据库中
*/
import java.net.*;
import java.io.*;
import java.util.*;
import java.sql.*;
public class GetPageData
{
Connection con; //数据库连接对象
Statement stmt; //用于执行SQL语句
ResultSet rset; //用于存储SQL查询的返回结果
ScanWebPage myScanWebPage=new ScanWebPage(); //创建网页扫描对象
String address; //用于存储网页地址
//主函数,程序入口
public static void main (String[] args)
{
try
{
//创建GetPageData对象,用于执行其方法
GetPageData myGetPageData=new GetPageData();
myGetPageData.openConn(); //建立数据库连接
myGetPageData.dealWeb0(); //提取首页数据
myGetPageData.dealWeb1(); //提取"机房信息"页面数据
myGetPageData.dealWeb2(); //提取"设备状态"页面数据
myGetPageData.dealWeb3(); //提取"实时图像"页面数据
//程序结束,断开连接
myGetPageData.closeConnection();
}
catch(Exception e)
{
//输出程序异常信息,以便调试
System.out.println("程序异常,信息为:\n"+e);
}
}
//连接数据库函数
void openConn()
{
try
{
//加载数据库驱动程序
Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
//根据用户名和密码,建立与数据库的连接
con=DriverManager.getConnection("jdbc:odbc:AccessServer","sa","");
//创建Statement对象
stmt=con.createStatement();
}
catch(java.lang.Exception exec)
{
System.out.println("加载数据库驱动程序出现异常\n"+exec.toString());
}
}
//首页数据处理函数
void dealWeb0() throws Exception
{
//address="http://192.9.201.121/"; //网页地址
address="file:///D:/学习/程序/网页提取/单片机网页/web0.htm"; //网页地址
//首页只需获得总告警信息
Information.indexColumn=0; //数组指针复位
Information.currentPage=0; //标识当前正在处理的页面
myScanWebPage.openConnection(address); //建立http连接
myScanWebPage.readFile(); //读取所需的页面数据
myScanWebPage.closeConnection(); //关闭http连接
}
//"机房信息"页面处理函数
void dealWeb1() throws Exception
{
//address="http://192.9.201.121/web1.1.htm"; //网页地址
address="file:///D:/学习/程序/网页提取/单片机网页/web1.1.htm"; //网页地址
String strSQL; //存储SQL语句
System.out.println("======================处理\"机房信息\"页面=======================");
Information.indexColumn=0; //数组指针复位
Information.currentPage=1; //标识当前正在处理的页面
myScanWebPage.openConnection(address); //建立http连接
myScanWebPage.readFile(); //读取所需的页面数据
myScanWebPage.closeConnection(); //关闭http连接
//测试代码
System.out.println("\n------------提取到页面数据-----------");
for(int i=0;i<Information.indexColumn;i++)
System.out.println(i+":"+Information.column[i]);
System.out.println("------------更新数据库----------------");
//更新数据表"机房信息_全局" 先查询数据是否存在
//若不存在则插入新值,否则不更新
strSQL="select * from 机房信息_全局 where 机房编号='"
+Information.column[1]+"'"; //根据数据表的主键查询
rset= stmt.executeQuery(strSQL); //执行SQL查询语句
if(rset.next()) //判断是否有需要的查询值
System.out.println("表\"机房信息_全局\" 机房编号="
+rset.getString("机房编号")+" 的信息已经存在\n");
else
{
//插入新纪录
strSQL="insert into 机房信息_全局(机房编号,机房名称,机房地址) values('"
+Information.column[1]+"','"+Information.column[0]+"','"
+Information.column[2]+"');";
//执行SQL插入语句
stmt.executeUpdate(strSQL);
//输出刚刚执行的SQL语句,以便分析
System.out.println("表\"机房信息_全局\"中成功添加记录:");
System.out.println(" 机房编号="+Information.column[1]+
"\n 机房名称="+Information.column[0]+
"\n 机房地址="+Information.column[2]+ "\n");
}
//更新数据表"机房信息_各地"前,先判断是否提取到新的记录
if(Information.column[3].equals("null")
||Information.column[4].equals("null")
||Information.column[5].equals("null"))
{
System.out.println("机房信息网页中无可用的职守人员信息!");
return;
}
//存储总告警信息
String state;
//根据告警标志,判断是否有警
if(Information.warning.equals("red.jpg"))
{
state="true";
System.out.println(Information.column[0]+" 告警!!\n");
}
else
{
state="false";
System.out.println(Information.column[0]+" 正常!!\n");
}
//更新数据表"机房信息_各地" 先查询数据是否存在
//若不存在则插入新值,否则不更新
//根据"值班人员"字段查询
strSQL="select * from 机房信息_各地 where 值班人员='"+Information.column[3]+"'";
rset= stmt.executeQuery(strSQL); //执行SQL查询语句
if(rset.next()) //判断是否有需要的查询值
System.out.println("表\"机房信息_各地\" 值班人员 \""
+rset.getString("值班人员")+"\" 信息已经存在");
else
{
//插入新纪录
strSQL="insert into 机房信息_各地"
+"(机房编号,值班人员,告警信息,值班电话,邮箱) values('"
+Information.column[1]+"','"+Information.column[3]+"',"
+state+",'"+Information.column[4]+"','"
+Information.column[5]+"');";
//执行SQL插入语句
stmt.executeUpdate(strSQL);
//输出刚刚执行的SQL语句,以便分析
System.out.println("表\"机房信息_各地\"中成功添加记录:");
System.out.println(" 机房编号="+Information.column[1]+
"\n 值班人员="+Information.column[3]+
"\n 告警信息="+state+
"\n 值班电话="+Information.column[4]+
"\n 邮箱="+Information.column[5]+ "\n");
}
}
//"设备状态"页面处理函数
void dealWeb2() throws Exception
{
int i,j; //临时变量
//address="http://192.9.201.121/web1.2.htm"; //网页地址
address="file:///D:/学习/程序/网页提取/单片机网页/web1.2.htm"; //网页地址
String strSQL; //存储SQL语句
System.out.println("\n\n======================处理\"设备状态\"页面=======================");
Information.indexColumn=0; //数组指针复位
Information.currentPage=2; //标识当前正在处理的页面
myScanWebPage.openConnection(address); //建立http连接
myScanWebPage.readFile(); //读取所需的页面数据
myScanWebPage.closeConnection(); //关闭http连接
System.out.println("\n------------提取到页面数据-----------");
for(i=0;i<Information.indexColumn;i++)
System.out.println(i+":"+Information.column[i]);
//distance表示页面中的"局号"标志和第一个设备序号标志之间的距离
int distance=1;
String equipmentID; //存储设备id
boolean state; //表示设备状态
System.out.println("------------更新数据库----------------");
for(i=0;i<6;i++) //依次记录所需的6个设备
{
j=1+distance+i*6; //记录页面中当前设备的序号
//计算设备编号对应的ID,监控设备编号=机房编号+设备编号
equipmentID=Information.column[1]+Information.column[j];
//更新数据表"设备管理_编号" 先查询数据是否存在
//若不存在插入新值,否则不更新
//根据"监控设备编号"字段查询
strSQL="select * from 设备管理_编号 where 监控设备编号='"+equipmentID+"'";
rset= stmt.executeQuery(strSQL); //执行SQL查询语句
if(rset.next()) //判断是否有需要的查询值
System.out.println("表\"设备管理_编号\" 监控设备编号="
+equipmentID+" 的信息已经存在\n");
else
{
//插入新纪录
strSQL="insert into 设备管理_编号"
+"(监控设备编号,设备所属机房,监控设备项目) values('"
+equipmentID+"','"+Information.column[0]
+"','"+Information.column[j+1]+"');";
//执行SQL插入语句
stmt.executeUpdate(strSQL);
//输出刚刚执行的SQL语句,以便分析
System.out.println("表\"设备管理_编号\"中成功添加记录:");
System.out.println(" 监控设备编号="+equipmentID+
"\n 设备所属机房="+Information.column[0]+
"\n 监控设备项目="+Information.column[j+1]+ "\n");
}
//更新数据表"设备管理_设备状态"前,先判断是否提取到新的记录
if(Information.column[j+3].equals("null")
||Information.column[j+4].equals("null")
||Information.column[j+5].equals("null"))
{
System.out.println("设备状态网页中无可用的 "
+Information.column[j+1]+" 设备使用时间记录信息!");
continue;
}
if(Information.column[j+2].equals("1"))
state=true; //1表示报警
else
state=false; //0表示正常
//更新数据表"设备管理_设备状态",先查询数据是否存在
//若不存在则插入新值,否则不更新
//根据"监控设备编号"字段查询
strSQL="select * from 设备管理_设备状态 where 监控设备编号='"+equipmentID+"'";
rset= stmt.executeQuery(strSQL); //执行SQL查询语句
if(rset.next()) //判断是否有需要的查询值
System.out.println("表\"设备管理_设备状态\" 监控设备编号="
+equipmentID+" 的信息已经存在\n");
else
{
//插入新纪录
strSQL="insert into 设备管理_设备状态"
+"(监控设备编号,监控设备状态,状态起始时间,状态结束时间,间隔时间) values('"
+equipmentID+"',"+state+",'"+Information.column[j+3]+"','"
+Information.column[j+4]+"','"+Information.column[j+5]+"');";
//执行SQL插入语句
stmt.executeUpdate(strSQL);
//输出刚刚执行的SQL语句,以便分析
System.out.println("表\"设备管理_设备状态\"中成功添加记录:");
System.out.println(" 监控设备编号="+equipmentID+
"\n 监控设备状态="+Information.column[j+2]+
"\n 状态起始时间="+Information.column[j+3]+
"\n 状态结束时间="+Information.column[j+4]+
"\n 开门结束时间="+Information.column[j+5]+"\n");
}
}
//更新数据表"设备管理_设备状态_刷卡记录"前,先判断是否提取到新的记录
if(Information.column[38].equals("null")
||Information.column[39].equals("null")
||Information.column[40].equals("null")
||Information.column[41].equals("null"))
System.out.println("设备状态网页中无可用的刷卡记录数据!");
else
{
//插入新纪录
strSQL="insert into 设备管理_设备状态_刷卡记录"
+"(卡号,机房编号,开门起始时间,开门结束时间,间隔时间) values('"
+Information.column[41]+"','"+Information.column[1]+"','"
+Information.column[38]+"','"+Information.column[39]+"','"
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -