Java讀取數據庫並返回省市區三級聯動的Json數據

本文主要介紹如何從數據庫中取出省市區的三級聯動數據,併合並轉換爲Json。

一、Json數據的效果

我們最終返回的Json數據格式的效果是這樣的:(部分)

[
    {
        "province": "湖北省",
        "provinceid": 0,
        "cities": [
            {
                "city": "武漢市",
                "areas": [
                    {
                        "area": "東西湖區",
                        "areaid": "420112"
                    },
                    {
                        "area": "漢南區",
                        "areaid": "420113"
                    },
                    {
                        "area": "蔡甸區",
                        "areaid": "420114"
                    },
                    {
                        "area": "江夏區",
                        "areaid": "420115"
                    },
                    {
                        "area": "黃陂區",
                        "areaid": "420116"
                    },
                    {
                        "area": "新洲區",
                        "areaid": "420117"
                    }

二、在Mysql中新建省市區三個表的數據(如有可忽略)

這是我在Mysql中添加的一些測試數據,如果你已經有這些數據了,請自動忽略。

省的表數據

市的表數據:

區的表數據:

關於省市區的表數據的SQL源碼,請查看下面的博客:

mysql省市區三級聯動數據庫的源碼

三、引入maven依賴

<dependency>
    <groupId>com.alibaba</groupId>
    <artifactId>fastjson</artifactId>
    <version>1.2.62</version>
</dependency>
<dependency>
    <groupId>mysql</groupId>
    <artifactId>mysql-connector-java</artifactId>
    <version>5.1.39</version>
</dependency>

四、新建省市區的實體類

get和set方法省略了,請自己補上

省:

public class Province {
    private int provinceid;
    private String province;
    private List<City> cities;
}

市:

public class City {
    private String cityid;
    private String city;
    private String provinceid;
    private List<Area> areas;
}

區:

public class Area {
    private String areaid;
    private String area;
    private String cityid;
}

五、查詢數據庫的工具類

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class MysqlUtil {

    private static String DRIVER = "com.mysql.jdbc.Driver";
    private static String URL = "xxxx";//自己的數據庫地址
    private static String USERNAME = "xxx";//自己的數據庫用戶名
    private static String PASSWORD = "xxx";//自己的數據庫密碼

    static {
        try {
            Class.forName(DRIVER);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }
    /**
     * 獲取數據庫連接
     *
     * @return
     */
    private static Connection getConnection() throws SQLException {
        return DriverManager.getConnection(URL, USERNAME, PASSWORD);

    }

    /**
     * 獲取省的數據
     * @return
     */
    public List<Province> getProvince() {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        List<Province> list = new ArrayList<>();
        try {
            conn = getConnection();
            String sql = "SELECT * FROM provinces";
            pstmt = conn.prepareStatement(sql);
            rs = pstmt.executeQuery();
            while (rs.next()) {
                Province province = new Province();
                province.setProvinceid(rs.getInt("provinceid"));
                province.setProvince(rs.getString("province"));
                list.add(province);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeConnection(conn, pstmt, rs);
        }
        return list;
    }

    /**
     * 獲取市的數據
     * @return
     */
    public List<City> getCity(String provinceid) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        List<City> list = new ArrayList<>();
        try {
            conn = getConnection();
            String sql = "SELECT * FROM cities WHERE provinceid = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,provinceid);
            rs = pstmt.executeQuery();
            while (rs.next()) {
                City city = new City();
                city.setCityid(rs.getString("cityid"));
                city.setCity(rs.getString("city"));
                list.add(city);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeConnection(conn, pstmt, rs);
        }
        return list;
    }

    /**
     * 獲取區的數據
     * @return
     */
    public List<Area> getArea(String cityid) {
        Connection conn = null;
        PreparedStatement pstmt = null;
        ResultSet rs = null;
        List<Area> list = new ArrayList<>();
        try {
            conn = getConnection();
            String sql = "SELECT * FROM areas WHERE cityid = ?";
            pstmt = conn.prepareStatement(sql);
            pstmt.setString(1,cityid);
            rs = pstmt.executeQuery();
            while (rs.next()) {
               Area area = new Area();
               area.setAreaid(rs.getString("areaid"));
               area.setArea(rs.getString("area"));
                list.add(area);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } finally {
            closeConnection(conn, pstmt, rs);
        }
        return list;
    }

    /**
     * 關閉數據庫連接
     *
     * @param conn
     */
    private static void closeConnection(Connection conn, Statement stmt, ResultSet rs) {
        if (rs != null) {
            try {
                rs.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (stmt != null) {
            try {
                stmt.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
        if (conn != null) {
            try {
                conn.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

六、主類

以下是我運行的測試類,可以實現生成三級聯動的Json數據

 public static void main(String[] args) {
        MysqlUtil mysqlUtil = new MysqlUtil();
        //獲取省的數據
        List<Province> provinces = mysqlUtil.getProvince();
        List<Province> provinceList = new ArrayList<>();
        for (Province province : provinces) {
            Province province1 = new Province();
            province1.setProvince(province.getProvince());

            //獲取市的數據
            List<City> cities = mysqlUtil.getCity(String.valueOf(province.getProvinceid()));
            List<City> cityList = new ArrayList<>();
            for (City city : cities) {
                City city1 = new City();
                city1.setCity(city.getCity());

                //獲取區的數據
                List<Area> areas = mysqlUtil.getArea(city.getCityid());
                city1.setAreas(areas);
                cityList.add(city1);
            }
            province1.setCities(cityList);
            provinceList.add(province1);
        }
        String jsonString = JSON.toJSONString(provinceList);
        System.out.println(jsonString);
    }

七、運行效果

解析後的Json數據

八、更多

更多技術文章,歡迎關注微信公衆號

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章