想实现一个功能:根据用户在公网上的ip地址对应到该用户所在的行政区划,精确到县。
这个功能能不能实现的关键还是在能不能找到一个数据较为完善的ip地址库。在网上找了一下,还是觉得纯真ip数据库好用。
实现步骤:
1 下载纯真ip数据库,然后解压成文件导入自己建的数据库(见附件)
2 下载全国省市县行政规划(见附件)
3 下载国家编码(见附件)
因为纯真ip数据库与ip对应的省市县是以文字来描述的,所以需要将文字转换为编码
将文字转换为全国省市县行政规划编号(六位)的程序:
package com.auto;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStreamReader;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
/**
*
* @author Feng
*
*/
public class UpdateIPData {
ArrayList<String[]> queryList = new ArrayList<String[]>();
public static void main(String argv[]) throws SQLException{
Connection conn = null;
String url = null;
String user = null;
String password = null;
String sql = null;
UpdateIPData imp = new UpdateIPData();
try {
Class.forName("com.mysql.jdbc.Driver"); //加载mysq驱动
} catch (ClassNotFoundException e) {
System.out.println("驱动加载错误");
e.printStackTrace();//打印出错详细信息
}
try {
url = "jdbc:mysql://localhost:3306/git_jeeshop?useUnicode=true&characterEncoding=UTF-8";
user = "root";
password = "root";
conn = DriverManager.getConnection(url,user,password);
} catch (SQLException e) {
System.out.println("数据库链接错误");
e.printStackTrace();
}
new UpdateIPData().updateCode(conn);
conn.close();
}
public void updateCode(Connection conn) throws SQLException {
//查询出 全国省市编码的编号和区域 ,以便后面做匹配
String querySql = "select code,name from t_area ";
Statement pstm = conn.createStatement();
ResultSet rs = pstm.executeQuery(querySql);
while(rs.next()) {
String code = rs.getString("code");
String name = rs.getString("name");
String[] strArray = {code,name};
queryList.add(strArray);
}
//查询出需要修改的数据
String sql = "select ip_from ,descname,code from t_ipcode where code is null";
rs = pstm.executeQuery(sql);
ArrayList<String[]> updateList = new ArrayList<String[]>();
while(rs.next()) {
long ipFrom = rs.getLong("ip_from");
String descName = rs.getString("descname");
String code = rs.getString("code");
String[] strArray = {String.valueOf(ipFrom),descName,code};
updateList.add(strArray);
}
//修改数据
String updateSql = "update t_ipcode set code =? where ip_from =?";
PreparedStatement pstm2 = conn.prepareStatement(updateSql);
conn.setAutoCommit(false);
List<String[]> provenceData = this.getChildName(null);
long index = 0;
System.out.println("----------开始循环t_ipcode表");
for(String[] strArray:updateList) {//循环t_ipcode表
index++;
String descName = strArray[1];//ip地址对应的地区的名字
String provenceCode = "";
String cityCode = "";
String countryCode = "";
//找省份的编码
for(String[] provence:provenceData) {
String code = provence[0];
String name = provence[1];
if(descName.contains(name)) {
//如果找到当前省的code
provenceCode = code;
}
}
if(provenceCode.equals("")) {
System.out.println("-----------descName:"+descName+"未找到省份编码");
continue;
}else {
//找城市的编码
List<String[]> cityList = this.getChildName(provenceCode);
for(String[] city:cityList) {
String code = city[0];
String name = city[1];
if(descName.contains(name)) {
//如果找到当前市的code
cityCode = code;
}
}
if(cityCode.equals("")) {
pstm2.setLong(2, Long.valueOf(strArray[0]));
pstm2.setString(1, provenceCode);
pstm2.addBatch();
}else {
//找县的编码
List<String[]> countryList = this.getChildName(cityCode);
for(String[] country:countryList) {
String code = country[0];
String name = country[1];
if(descName.contains(name)) {
//如果找到当前县的code
countryCode = code;
}
}
if(countryCode.equals("")) {
pstm2.setLong(2, Long.valueOf(strArray[0]));
pstm2.setString(1, cityCode);
pstm2.addBatch();
}else {
pstm2.setLong(2, Long.valueOf(strArray[0]));
pstm2.setString(1, countryCode);
pstm2.addBatch();
}
}
}
if(index%1000==0) {
pstm2.executeBatch();
System.out.println("已经提交:"+index+"行");
}
}
pstm2.executeBatch();
conn.setAutoCommit(true);
conn.close();
}
/**
* 获取省市县数据的方法
* @return
*/
private List<String[]> getChildName(String code) {
List<String[]> list = new ArrayList<String[]>();
for(String[] strArray:queryList) {
if(code==null) {
//查找省级数据
if(strArray[0].endsWith("0000")) {
String[] s = {strArray[0],strArray[1]};
list.add(s);
}
}else {
//查找当前数据的子数据
code = code.replace("0", "");
if(strArray[0].startsWith(code)) {
String[] s = {strArray[0],strArray[1]};
list.add(s);
}
}
}
return list;
}
}
这段程序遍历纯真ip库的每条记录,匹配每个ip段的所在地址与行政区划的地址,然后根据匹配的结果更新纯真ip库。
分享到:
相关推荐
2. 城市定位:纯真IP数据库通过将IP地址与地理位置关联,可以提供准确到城市级别的定位服务。这对于网页访问统计、网络安全分析、广告定向等场景具有重要意义。 3. 数据库结构:纯真IP数据库通常以二进制格式存储,...
### 纯真IP数据库离线文件知识点解析 #### 一、概述 纯真IP数据库离线文件是一种用于离线查询IP地址相关信息的数据库文件。它可以帮助用户在没有网络连接的情况下,快速查询到IP地址对应的地理位置等信息。相比于...
纯真IP数据库格式详解 **一、纯真IP数据库概览** 纯真IP数据库是互联网上广受欢迎的IP地址查询数据库之一,以其详尽的记录和高效的查询速度著称。该数据库不仅被众多QQ外挂用于显示用户IP的功能,而且在网络安全、...
"纯真IP数据库查询系统"是一个专用于查询IP地址信息的工具,主要基于"纯真IP数据库"这一数据资源。这个系统在2008年10月20日进行了数据库的更新,确保了当时的数据新鲜度和准确性,能够提供及时的IP定位服务。 在IT...
2. 纯真IP数据库的使用与解析 3. PHP文件I/O操作和编码转换 4. IP地址的比较与查找 5. 数据返回与编码控制 学习这个知识点,不仅可以提升你在IP查询方面的技术能力,还能加深对PHP和网络编程的理解。
纯真IP整理器是一款专为处理IP数据库设计的工具,主要功能是提取并整理IP数据库中的关键信息,将其转化为便于使用的纯真IP数据格式。在IT行业中,IP数据库通常用于网络定位、网络管理以及网络安全等方面,而“纯真”...
在纯真IP数据库中,IP段被用来划分不同地理区域和运营商。 3. 地理位置信息:数据库提供了IP地址对应的国家、地区、城市等地理信息,有助于了解用户来源和进行地域定向服务。 4. 运营商信息:每个IP地址通常对应一...
IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库查询程序IP数据库...
在本场景中,“ASP利用纯真IP数据库获取IP”指的是使用ASP编程技术结合纯真IP数据库来获取并解析IP地址的地理位置信息。纯真IP数据库是中国的一个广泛使用的IP地址库,它包含了全球范围内的IP地址与其对应的城市、...
5. **数据库格式与应用**:纯真IP数据库通常以特定的文本格式存储,例如每行代表一个IP地址段及其对应信息。开发者可以通过编程接口(API)或直接读取文件来访问数据,集成到自己的应用程序中。 6. **网络安全与...
其中,“纯真IP数据库”(简称ShowIP)是一款广泛使用的IP地址数据库,它包含了全球范围内的IP地址与地理位置信息,为企业和个人提供了快速查询和解析IP地址的能力。 一、IP数据库基础 IP数据库是存储了大量IP地址...
纯真IP数据库是一种广泛使用的IP地址数据库,主要包含中国大陆及部分国际地区的IP地址与地理位置信息。这个MySQL文件是用于在服务器上存储和管理这些数据的,以便网站或应用程序能够快速查询到特定IP地址对应的地区...
纯真IP数据库是收集并整理了全球范围内的IP地址与对应地理信息的数据集合,它通常以文本文件的形式存在,便于各种编程语言调用。 首先,我们需要了解如何在ASP中读取文件。ASP提供了`<% %>`的脚本块和内置对象如`...
总的来说,纯真IP数据库提供了方便的IP地址与地理信息的映射,对于开发和运维人员而言,正确处理其文件格式和编码,能够有效提高工作效率并保证数据的准确性。在使用时,应注意文件的编码设置,选择合适的工具和方法...
标题中的“纯真IP数据库_java版”指的是一个专门用于Java平台的IP地址查询工具,它基于纯真IP数据库。纯真IP数据库是中国较常见的IP地址库,包含了中国大陆及部分国际地区的IP地址信息,用于查询IP地址所属的地区、...
首先,"纯真IP数据库"是一个广泛使用的IP地址库,包含了全球IP地址与地理位置的对应关系。它是由中国的“纯真”团队维护,提供了IP到国家、地区、城市等多级地理信息的映射。这个数据库定期更新,以确保信息的准确性...
纯真IP数据库文件,dat数据非exe安装包,每天会扫描两次(17:55和23:55),当发现更新时也可以选择手动运行来获得文件。 目录说明 1、qqwry.dat 为最新数据直链(即下即用),每次更新会覆盖之前的内容,如果想要...
sunwe(云飞扬)转制 1,数据来源于QQip数据库纯真版. 2,本数据包包含全面,包括...3,另外,本数据包另附转化好的 纯真ip数据文本文件.(已经经过空格批量替换和插入间隔符',' 这样可以方便直接导入其他类型的数据库)
纯真IP数据库主要包含全国乃至全球的IP地址与地理位置信息,如城市、省份、运营商等。它通过定期更新,确保信息的准确性和时效性。对于需要进行IP定位、访问控制或者流量分析的应用来说,纯真IP数据库是不可或缺的...