省市区sql

国家统计局公布的最新县及县以上行政区划代码的网址(最新数据截止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



转载于:https://my.oschina.net/zouningujs/blog/370136

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值