Java解析IP数据库,工程文档
来源:互联网 发布:曹雪松java百度网盘 编辑:程序博客网 时间:2024/06/06 01:10
转载于:http://www.cnblogs.com/MyITHome/archive/2012/08/05/2624155.html
机缘巧合之下,需要研究下IP数据库,这个库提供给的IP定位功能十分之有用。
可以想象,他会被用在很多场合,电子商务需要统计网站流量的来源和分布,社交工具可以知道对方所在的位置等等;、
网络上,清华大学的某人,重写了介绍文档,言简意赅,行文清晰,同时提供了Demo,快速上手。
网上提供的查询IP的程序,写的比较混乱,方法笼杂在一起。同时存在数组越界访问的异常,类封闭性奇差,开放性很低。具象化的说就是,文件的位置和路径设置定死了,不能通过properties文件方便的修改,也没有运行的主类。
总之一句话,网上的那个工程仅仅是项目,不具有开放性和封闭性,继续使用的朋友们必须重头读懂程序,实际上这个完全没有必要,重用性低,低,低。
那么,我重新设计了程序,增强了程序的功能,不仅能查询IP,还能导出文件,能够自动插入数据库。程序优化后,可在40S 内完成44万条的数据库插入(ps:本人cpu i2),提供property文件进行参数修改。
增加sql脚本优化后,数据库的国,省,市,运营商属性基本无误。同时提供装饰类,简单看下我提供的工程结构,可快速实施到你需要的项目中。
数据库设计逻辑:http://wenku.baidu.com/view/6126a76e58fafab069dc023d.html
较完成的网络程序:http://www.blogjava.net/libin2722/articles/338316.html
源文件:QQwry.dat , 8.82M , 记录更新至2012年7月15日,自行网上下载;
1. 工程介绍
本工程doTestIP为eclipse(java EE)下创建的工程,JDK1.6实现的功能如下:
1、解析二进制的IP数据库文件
2、导出经过解析后的IP记录文档,只支持txt格式
3、支持查询IP的归属地
4、支持查询某地区的IP或者IP范围
5、能将数据分解成如下格式:< IP,国家,省/市,城市,详细地址,单位地址,运营商>,并批量插入数据库。(44万条数据,优化后耗时约60s)
2. 工程结构
需要的jar包:junit-4.8.1.jar & log4j-1.2.15.jar & ojdbc14.jar
2.1 运行主类(入口)
IP地址查询的运行类为Decorator.java
插入数据库的运行类为Run.java
package路径为doTestIP/src/com/showtime/main/
2.2 包结构
2.2.1 IPparse:这个包实现了解析IP数据库文件和查询IP地址的功能。
IPSeeker.java 是主要类,其余是辅助类,public List<IPEntry> getAllData(){},该方法能获取所有解析后的数据;
public IPLocation getIPLocation(String ip){},该方法能根据IP查询地址;
public List<IPEntry> getIPEntriesDebug(String s) {},该方法根据地点查询IP;
public List<IPEntry> getIPEntries(String s) {},该方法根据地点查询IP,用文件映射的方式,效率更高。
2.2.2 Main:运行类
Decorator.javaIP为地址查询的运行类,
Run.java为插入数据库的运行类。
2.2.3 Module:这个包实现了向文件写数据和向数据库插入数据的功能。
InputFileFirstExtends.java 实现导出文件的功能,文件内存放解析出类的数据;
InputFileSecondExtends.java 实现导出文件的功能,文件内存放格式化后的数据,格式如下:< IP,国家,省/市,城市,详细地址,单位地址,运营商>;
InsertIntoTablesExtends.java 实现向数据库中IP表和Area表中插入数据的功能。
2.2.4 SplitString:该包实现将数据分解成固定格式,如:< IP,国家,省/市,城市,详细地址,单位地址,运营商>
PropertyIspExtends.java 设置运营商分割的标准
PropertyProvinceExtends.java 设置省份分割的标准
TruncateStringImpl.java 实现数据格式转换
2.2.5 功能包
该包提供辅助。
ConnOracleJDBC.java 提供JDBC方式连接数据库;
ConnOracelJNDI.java 提供JNDI方式连接数据库;
LogFactory.java 日志工厂
2.2.6 单元测试包
2.3 接口和抽象类
2.3.1 AbsInputFile.java
导出文件的抽象类,继承它的子类为InputFileFirstExtends.java,InputFileSecondExtends.java
2.3.2 AbsWriteIntoOracle.java
向数据库插入数据的抽象类,子类为InsertIntoTableExtends.java
2.3.3 AbsProperty.java
设置字段拆分标准的抽象类,子类为PropertyIspExtends.java,PropertyProvinceExtends.java
2.3.4 ITrucateString.java
格式化单条记录的接口,实现类为TruncateStringImpl.java
- Java解析IP数据库,工程文档
- Java解析IP数据库,工程文档
- JAVA:实现解析纯真IP数据库
- java解析xml文档并保存到数据库
- java 解析ip
- java 解析 html文档
- Java解析XML文档
- JAVA 解析XML文档
- java解析word文档
- java解析xml文档
- java 解析pdm文档
- java 解析pdm文档
- Java解析XML文档
- java解析xml文档
- Java解析XML文档
- java解析xml文档
- java解析纯真IP数据库,查询IP,导出所有数据,插入oracle
- Maven构建Hadoop(java)工程详情文档
- 归并排序(Merge Sort)
- 最快搭建android应用开发环境(拷贝式安装)
- 中国公司为进美国市场首次上国会山接受拷问
- Think_in_CPP第十二章 操作符重载(7)
- 直方图均衡的数学原理
- Java解析IP数据库,工程文档
- GDI+学习记录(10)- 影线画刷HatchBrush
- wbs的几种工具
- 举例说明android源代码调试中加入的log方法
- SQL 通配符
- AIX 的网络通信
- APP常见的九种推广方式优缺点对比
- html有个文档,它的value的初始值为0,有一个按钮,单击按钮,使得文本框中的值加1。
- 源码DisplaySettings分析android横竖屏切换的开关