省市二级联动数据库生成代码(JAVA)(二)

2014-11-24 09:12:32 · 作者: · 浏览: 1

//定义保存省、市数据的数据结构。从里向外看,Map保存的是 “省=>简拼” 这样的数据
//如“河北=>HB”。List里面的Map则保存着“市=>简拼”的数据,如“保定=>BD”,而list集合
//保存该省下所有市的集合。最外层的Map就是“省=>各市集合”的关联集合,这样省市关系就确定了。
Map, List>> provinceCity = new LinkedHashMap, List>>();
try {
//定义输入流,可以使用readline()读取一行
BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(provinceFile), "UTF-8"));
String provinceName = "";
while ((provinceName = br.readLine()) != null) { //先读第一行,省的名字
//定义保存“省=>简拼”的Map
Map province = new LinkedHashMap();
//定义保存“市=>简拼”Map的List集合,结构为[{保定=>BD}, {沧州=>CZ},……]
List> citiesArray = new ArrayList>();

//调用汉字转拼音方法
wordToPinYinSZM(provinceName.trim(), province);
//读取第二行,该省下的所有市区
String cityNames = br.readLine();
//文件中的每个市区用两个空格格开,所以以两个空格分隔成市区的数组
String[] cities = cityNames.split(" ");
for(int j = 0; j < cities.length; j++) {
//定义保存“市=>简拼”Map
Map city = new LinkedHashMap();
String cityName = cities[j].trim();
//调用汉字转拼音方法
wordToPinYinSZM(cityName, city);
//添加到list集合中
citiesArray.add(city);
}
//添加到“省=>市的集合”的Map中
provinceCity.put(province, citiesArray);
}
//调用转换为sql语句的代码
convertMapToSql(provinceCity);
} catch (FileNotFoundException e) {
e.printStackTrace();
} catch (IOException e) {
e.printStackTrace();
}

}

/**
* 把“省=>市的集合”Map转换为SQL语句
* @param provinceCity
*/
public static void convertMapToSql(Map, List>> provinceCity) {
//获取最外层Map的EntrySet 结构为[{河北=>HB, [{保定=>BD}, {石家庄=>sjz},{……}]},{……}]
Set, List>>> provinceEnties = provinceCity.entrySet();
//获取迭代器
Iterator, List>>> itPE = provinceEnties.iterator();
//定义数据库中,省的ID从1000000开始
long provinceId = 1000000;
while(itPE.hasNext()) {
//获取一个Entry键-值对
Entry, List>> proviceEntry = itPE.next();
//Key为省,Value为市的List集合
Map provinces = proviceEntry.getKey();

//获取省份的Entry,结构为[{河北=>HB}, {北京=>BJ}] key为中文,value为简拼
Set> proEntries = provinces.entrySet();
Iterator> proIt = proEntries.iterator();
while(proIt.hasNext()) {
Entry proEntry = proIt.next();
String provinceName = proEntry.getKey();
String provincePinYin = proEntry.getValue();

//组合sql语句
StringBuilder sb = new StringBuilder();
//定义的表结构为:id, type, name, short,分别为id,类型(1为1级,如省,2为2级,如市),父ID即市的所属省份, 名字, 简拼
sb.append("insert into city values ('");
sb.append(provinceId).append("','").append("1','','").append(provinceName).append("', '").append(provincePinYin).append("');");
//我没有生成sql文件,而是直接显示在console里面,大家可以直接从里面复制