当前位置:编程学习 > JAVA >>

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

最近在给一客户做网站,用的是php,现在需要有一个下拉框选择省市,并且需要保存省市的简拼,如“河北 HB”。我在网上找了半天,发现基本没有符合要求的代码,于是自己顶着浪费巨大时间的风险,动手写了一个自动生成省市二级联动insert语句的代码。由于时间仓促,自己的水平也有限,所以写的代码基本谈不上是合理的,可维护,可扩展的。我在此仅提供一个具体的思路,想把它写的漂亮点,还请广大朋友们跟据自己的需要进行重构。^o^ 还有,最后结果直接输出到了控制台,请大家直接复制到一个文本文件中,并把扩展名改为.sql。在源代码里,我用到了LinkedHashMap这个集合类,目的是为了保持集合元素的顺序。

所用工具:Eclipse,汉字转拼音工具包:pinyin4j 2.5 可点击下载,也可在我的源代码包里找到

所用语言:java

相关文件:CSDN博客不能上传附件,所以我传到百度网盘了,请大家费些心下载,不能下载的请留言告知。

数据来源于谷歌地图

省市列表(无省、市、区字样)
省市列表(带省、市、区)
源代码
注意:由于我不想把省、市、区这样的字也转换成拼音,如河北省转换为HBS,北京市转换为BJS,我把省、市、区相关字样已删除,但我也保留了原文件,有需要的可以下载。

表结构:

[sql] 
CREATE TABLE IF NOT EXISTS `city` ( 
  `id` varchar(50) NOT NULL, 
  `type` varchar(50) NOT NULL, 
  `parent_id` varchar(50) NOT NULL, 
  `name` varchar(50) NOT NULL, 
  `short` varchar(50) NOT NULL, 
  PRIMARY KEY (`id`) 
) ENGINE=InnoDB DEFAULT CHARSET=utf8; 

具体实现请看以下代码:

[java] 
package com.zxq.pinyin; 
 
import java.io.BufferedReader; 
import java.io.File; 
import java.io.FileInputStream; 
import java.io.FileNotFoundException; 
import java.io.IOException; 
import java.io.InputStreamReader; 
import java.util.ArrayList; 
import java.util.Iterator; 
import java.util.LinkedHashMap; 
import java.util.List; 
import java.util.Map; 
import java.util.Map.Entry; 
import java.util.Set; 
 
import net.sourceforge.pinyin4j.PinyinHelper; 
import net.sourceforge.pinyin4j.format.HanyuPinyinCaseType; 
import net.sourceforge.pinyin4j.format.HanyuPinyinOutputFormat; 
import net.sourceforge.pinyin4j.format.HanyuPinyinToneType; 
import net.sourceforge.pinyin4j.format.HanyuPinyinVCharType; 
import net.sourceforge.pinyin4j.format.exception.BadHanyuPinyinOutputFormatCombination; 
 
public class Covert { 
     
    /**
     * 汉字转拼音,并将结果保存到省或市的map中
     * @param words 需要转换的字符串
     * @param provinceOrCity 省或市的Map
     */ 
    public static void wordToPinYinSZM(String words, Map<String, String> provinceOrCity) { 
        //调用Pinyin4J的方法 
         
        //定义拼音输出格式 
        HanyuPinyinOutputFormat hof = new HanyuPinyinOutputFormat(); 
        //大写 
        hof.setCaseType(HanyuPinyinCaseType.UPPERCASE); 
        //不包含声调 
        hof.setToneType(HanyuPinyinToneType.WITHOUT_TONE); 
        //u用V表示 
        hof.setVCharType(HanyuPinyinVCharType.WITH_V); 
         
        //由于只能对单字转换,所以需要把字符串转换为字符数组 
        char[] characters = words.toCharArray(); 
        try { 
            //StringBuilder存放结果 
            StringBuilder sb = new StringBuilder(); 
            for(int i = 0; i < characters.length; i++) { 
                //调用汉字转拼音核心方法,大家可以看到返回的是一个数组,因为有的汉字有多音字,所以可能返回多个 
                //拼音结果,对此,我只取第一个,pinyinArray[0],这样做不好的地方就是可能有的简拼不准确,例如 
                //“重庆”我得到的是ZQ,zhong qing,这一点有待完善 
                String[] pinyinArray = PinyinHelper.toHanyuPinyinStringArray(characters[i], hof); 
                //substring(0, 1)则表示只取首字母 
                sb.append(pinyinArray[0].substring(0, 1)); 
            } 
            //放入省或市的Map中 
            provinceOrCity.put(words, sb.toString()); 
        } catch (BadHanyuPinyinOutputFormatCombination e) { 
            e.printStackTrace(); 
        } 
    } 
     
 
    /**
     * @param args
     */ 
    public static void main(String[] args) { 
 
        //读取事先定义好的省市文本文件,第一行为省/直辖市,第二行为各地级市 
        File provinceFile = new File("F:\\province_city\\province.txt"); 
         
        //定义保存省、市数据的数据结构。从里向外看,Map<String, String>保存的是 “省=>简拼” 这样的数据 
        //如“河北=>HB”。List里面的Map<String, String>则保存着“市=>简拼”的数据,如“保定=>BD”,而list集合 
        //保存该省下所有市的集合。最外层的Map就是“省=>各市集合”的关联集合,这样省市关系就确定了。 
        Map<Map<String, String>, List<Map<String, String>>> provinceCity = new LinkedHashMap<Map<String, String>, List<Map<String, String>>>(); 
        try { 
            //定义输入流,可以使用readline()读取一行 
            BufferedReader br = new BufferedReader(new InputStreamReader(new FileInputStream(provinceFile), "UTF-8")); 
            String provinceName = ""; <

补充:软件开发 , Java ,
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,