本文主要介紹如何從數據庫中取出省市區的三級聯動數據,併合並轉換爲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源碼,請查看下面的博客:
三、引入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數據
八、更多
更多技術文章,歡迎關注微信公衆號