文档章节

省市区sql

 邹宁
发布于 2015/01/21 14:10
字数 1078
阅读 126
收藏 3

国家统计局公布的最新县及县以上行政区划代码的网址(最新数据截止2013.08.31):

http://www.stats.gov.cn/tjsj/tjbz/xzqhdm/201401/t20140116_501070.html

利用其规律将这些数据转为想要的sql语句.

需要注意的地方是直辖市的市辖区和县的操作,以及省直辖县级行政区划和自治区直辖县级行政区划的操作

直接上代码, 我为了学习学习新知识, 代码用 java7 写的

private static final int TYPE_PRIVINCE = 1;
private static final int TYPE_CITY = 2;
private static final int TYPE_REGION = 3;

public static void main(String[] args) {
	StringBuilder sbProvince = new StringBuilder();
	StringBuilder sbCity = new StringBuilder();
	StringBuilder sbRegion = new StringBuilder();
	final String CR = System.getProperty("line.separator");// 换行符
	String currentProvinceCode = null;// 当前省code
	String currentProvinceName = null;// 当前省名字
	String currentCityCode = null;// 当前市
	String currentCityName = null;// 当前城市名字
	int type = TYPE_PRIVINCE;
	boolean isProvinceRegion = false;// 是否为省直辖县级行政区划
	// 读取文件
	Path path = Paths.get("E:\\省市区信息.txt");
	try (BufferedReader reader = Files.newBufferedReader(path,
			Charset.forName("GBK"))) {// try-with-resource
		String line = null;
		while ((line = reader.readLine()) != null) {
			if (!isEmpty(line)) {
				String[] segments = line.trim().split(" ");// 去掉首尾空字符
				String code = "";// 代号
				String name = "";// 名字
				code = segments[0];
				name = segments[segments.length - 1];
				type = getType(code);
				if (type == TYPE_PRIVINCE) {
					currentProvinceCode = code;
					currentProvinceName = name;
					// 格式化插入省表的语句
					String insertProvinceSql = getProvinceSql(code, name);
					sbProvince.append(insertProvinceSql).append(CR);
					// 添加省份注释信息
					sbCity.append("//").append(currentProvinceName)
							.append(CR);
				} else if (type == TYPE_CITY) {
					isProvinceRegion = false;
					// 源数据对于直辖市下面分为市辖区和县
					// 将市名处理成和直辖市名字一样
					if ("县".equals(name)) {
						continue;
					}
					if ("市辖区".equals(name)) {
						name = currentProvinceName;// 直辖市,同省
					}
					if(name.contains("直辖县级行政区划")){//省直辖县级行政区划,自治区直辖县级行政区划
						isProvinceRegion = true;
						continue;
					}else {
						isProvinceRegion = false;
					}

					currentCityCode = code;
					currentCityName = name;
					// 格式化插入市表的语句

					String insertCitySql = getCitySql(code, name,
							currentProvinceCode);
					sbCity.append(insertCitySql).append(CR);
					// 添加省市注释信息
					sbRegion.append("//").append(currentProvinceName)
							.append(currentCityName).append(CR);

				} else if (type == TYPE_REGION) {
					if ("市辖区".equals(name)) {// 去掉市辖区,没用的数据
						continue;
					}
					if (isProvinceRegion) {
						// 省直辖县级行政区划操作同市
						currentCityCode = code;
						currentCityName = name;
						// 格式化插入市表的语句
						String insertCitySql = getCitySql(code, name,
								currentProvinceCode);
						sbCity.append(insertCitySql).append(CR);
						// 添加省市注释信息
						sbRegion.append("//").append(currentProvinceName)
								.append(name).append(CR);
					} else {
						// 格式化插入区表的语句
						String insertRegionSql = getRegionSql(code, name,
								currentCityCode);
						sbRegion.append(insertRegionSql).append(CR);
					}
				}

			}
		}
	} catch (Exception e) {
		e.printStackTrace();
	}
	System.out.println("//插入省份数据");
	System.out.println(sbProvince.toString());
	System.out.println("//插入市数据");
	System.out.println(sbCity.toString());
	System.out.println("//插入区县数据");
	System.out.println(sbRegion.toString());
}

private static final String insertRegionSql = "db.execSQL(\"insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('%s','%s','%s')\");";

private static String getRegionSql(String code, String name, String cityCode) {
	return String.format(insertRegionSql, code, name, cityCode);
}

private static final String insertCitySql = "db.execSQL(\"insert into CITY('CITY_ID','CITY_NAME','PROVINCE_ID') values('%s','%s','%s')\");";

private static String getCitySql(String code, String name,
		String provinceCode) {
	return String.format(insertCitySql, code, name, provinceCode);
}

private static final String insertProvinceSql = "db.execSQL(\"insert into PROVINCE('PROVINCE_NAME','PROVINCE_ID') values('%s','%s')\");";

private static String getProvinceSql(String code, String name) {
	return String.format(insertProvinceSql, name, code);
}

private static int getType(final String code) {
	if (isEmpty(code)) {
		return -1;
	}

	if (code.endsWith("0000")) {// 末尾4个0为省
		return TYPE_PRIVINCE;
	}
	if (code.endsWith("00")) {// 末尾2个0为市
		return TYPE_CITY;
	}

	return TYPE_REGION;
}

private static boolean isEmpty(String str) {
	if (str == null || str.length() == 0) {
		return true;
	} else {
		return false;
	}
}

操作结果,拿北京市的信息出来看一下:

//插入省份数据
db.execSQL("insert into PROVINCE('PROVINCE_NAME','PROVINCE_ID') values('北京市','110000')");
//插入市数据
//北京市
db.execSQL("insert into CITY('CITY_ID','CITY_NAME','PROVINCE_ID') values('110100','北京市','110000')");
//插入区县数据
//北京市北京市
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110101','东城区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110102','西城区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110105','朝阳区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110106','丰台区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110107','石景山区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110108','海淀区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110109','门头沟区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110111','房山区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110112','通州区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110113','顺义区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110114','昌平区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110115','大兴区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110116','怀柔区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110117','平谷区','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110228','密云县','110100')");
db.execSQL("insert into REGION('REGION_ID','REGION_NAME','CITY_ID') values('110229','延庆县','110100')");

先讲统计局的数据拷贝保存到文件,然后将代码的insertRegionSql,insertCitySql,insertProvinceSql三句改为自己想要的格式即可.

原始数据, sql, java代码都可以点这个链接下载:

http://pan.baidu.com/s/1sj4rqKP



© 著作权归作者所有

粉丝 1
博文 22
码字总数 3829
作品 0
南京
私信 提问
javaWeb数据库动态加载全国省市区三级联动

demo源码下载地址:https://git.oschina.net/zhengweishan/GetProvinceCityArea 首先声明一下,全国省市区三级联动有很多的插件。没有必要这么麻烦的把省市区存到数据库,然后再获取。这样缺...

火龙战士
2015/04/16
17.4K
8
三级联动下拉选择省市区sql查询求助

自关联不怎么会 查询【region_info】省市区信息表 查询条件: 【level_type】 = 1 【status】 = 1 按【id】 正序 排列 select name,id from region_info where level_type=1 and status=1 or...

idiot_ioi
2016/02/26
2.1K
3
有没有关于mysql 简单入门的书籍?(sql只会几张表简单left join下)

平时最多用left join多连几张表查询,子查询也用的比较少(一条sql出现多个select就慌。存储过程也不会) 索引也没怎么用过。 像省市区三级表;订单表,订单详细表;班级分组排名平均分;消费...

今天天气不错啊
03/07
298
3
省市区三级联动jquery插件--city-picker

下拉面板式省市区三级联动jquery插件,视觉清爽,交互体验超棒。 支持省市二级联动,省市区三级联动,省市区地址缩写。 支持在Form中通过Tab上下游走Focus,省市区可以单独点击,标签式互动。...

史涛
2016/03/01
15.8K
7
页面字段存储数据库并且回显!!!新手求指导

1、现有一张地区表,存储省、市、区等信息。一张用户表存储用户信息,包括地址等字段。 2、页面使用三个下拉框联动显示省市区,现在想将省市区对应的id存进用户表的一个字段中。 3、使用aja...

lc1223
2016/07/11
152
1

没有更多内容

加载失败,请刷新页面

加载更多

75、GridFS

GridFS是MongoDB提供的用于持久化存储文件的模块,CMS使用Mongo DB存储数据,使用FGridFS可以快速集成开发。 工作原理: 在GridFS存储文件是将文件分块存储,文件会按照256KB的大小分割成多个...

lianbang_W
52分钟前
4
0
js bind 绑定this指向

本文转载于:专业的前端网站➱js bind 绑定this指向 1、示例代码 <!DOCTYPE html><html lang="zh"> <head> <meta charset="UTF-8" /> <title>bind函数绑定this指向......

前端老手
55分钟前
4
0
CentOS Linux 7上将ISO映像文件写成可启动U盘

如今,电脑基本上都支持U盘启动,所以,可以将ISO文件写到U盘上,用来启动并安装操作系统。 我想将一个CentOS Linux 7的ISO映像文件写到U盘上,在CentOS Linux 7操作系统上,执行如下命令: ...

大别阿郎
今天
4
0
深入vue-公司分享ppt

组件注册 全局注册 注册组件,传入一个扩展过的构造器 Vue.component('my-component', Vue.extend({/*...*/})) 注册组件,传入一个选项对象(自动调用Vue.extend) Vue.component('my-comp...

莫西摩西
今天
4
0
gitlab重置管理员密码

登录gitlab服务器 [root@localhost bin]# sudo gitlab-rails console productionLoading production environment (Rails 5.2.3)irb(main):001:0> u = User.where(email: 'admin@example.co......

King华仔o0
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部