java 区域表 三级检索 if 判断

注:仅供参考,多多指点,若有更好的方法,提高效率的,请留下你的思路。。。。		
if(area != 0){
			//判断有没有二级
			if(this.areaList(area).size() != 0){
				if(area1 != 0){
					//判断有没有三级
					if(this.areaList(area1).size() != 0){
						if(area2 != 0){
							hql += " and region ="+area2;
							hqlCount += " and region ="+area2;
						}else{
							hql += " and region in (select countryAreaId from Area where parentId ="+area1+")";
							hqlCount += " and region in (select country_area_id from area where parent_id ="+area1+")";
						}
					}else{
						hql += " and region ="+area1;
						hqlCount += " and region ="+area1;
					}
				}else{
					hql += " and region in (select countryAreaId from Area where parentId in (select countryAreaId from Area where parentId="+area+"))";
					hqlCount += " and region in (select country_area_id from area where parent_id in (select country_area_id from area where parent_id="+area+"))";
				}
			}else{
				hql += " and region ="+area;
				hqlCount += " and region ="+area;
			}
		}

### Java 实现省市区三级联动 #### 创建 `Location` 类示地理位置信息 为了示省、市、区的信息,在 `java` 文件夹下创建了一个名为 `Location` 的类。此类用于封装位置名称及其下属城市列。 ```java public class Location { private String name; private List<String> cities; public Location(String name, List<String> cities) { this.name = name; this.cities = cities; } public String getName() { return name; } public List<String> getCities() { return cities; } } ``` 此部分定义了基本的数据结构,使得后续逻辑处理更加方便[^1]。 #### 主活动实现 (`MainActivity.java`) 在主活动中实现了界面初始化以及响应用户交互的部分: ```java @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); Spinner provinceSpinner = findViewById(R.id.province_spinner); Spinner citySpinner = findViewById(R.id.city_spinner); Spinner districtSpinner = findViewById(R.id.district_spinner); ArrayAdapter<CharSequence> adapterProvince = ArrayAdapter.createFromResource(this, R.array.provinces_array, android.R.layout.simple_spinner_item); adapterProvince.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item); provinceSpinner.setAdapter(adapterProvince); provinceSpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { updateCities(position); // 更新城市的选项 } @Override public void onNothingSelected(AdapterView<?> parent) {} }); citySpinner.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View view, int position, long id) { updateDistricts(position); // 更新区/县的选项 } @Override public void onNothingSelected(AdapterView<?> parent) {} }); } private void updateCities(int selectedPosition) { // 根据选中的省份更新城市数据源... } private void updateDistricts(int selectedPosition) { // 根据选中的城市更新区/县数据源... } ``` 这段代码展示了如何通过监听器机制来动态加载不同级别的地理单位,并根据用户的输入调整其他组件的内容。 #### 数据库查询方法 对于更复杂的应用场景,可能还需要从数据库获取地区信息。这里提供了一种基于给定编码参数返回对应城市列的方法示例: ```java public List findCity(String code) throws Exception { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection(url, user, password); String sql = "SELECT * FROM City WHERE ProvinceCode=?"; pstmt = conn.prepareStatement(sql); pstmt.setString(1, code); rs = pstmt.executeQuery(); ArrayList result = new ArrayList<>(); while(rs.next()){ result.add(rs.getString("Name")); } return result; } finally { if (rs != null) rs.close(); if (pstmt != null) pstmt.close(); if (conn != null) conn.close(); } } ``` 该函数负责连接到 MySQL 数据库并执行 SQL 查询语句以检索指定省级行政区划下的所有市级行政区域名单[^2]。 #### AJAX 请求与 JSON 响应 当涉及到前后端分离架构时,可以利用 AJAX 技术实现实时通信而不刷新页面的效果。下面是一个简单的例子说明怎样发送请求并接收服务器端传回的城市列作为 JSON 对象: ```javascript function getCityByProvince(provinceId){ $.ajax({ type : 'POST', url : '/get_city_by_province', data : {'province_id':provinceId}, success:function(data,status,xhr){ var options = ''; $(data).each(function(index,item){ options += '<option value="'+item.code+'">'+item.name+'</option>'; }); $('#city').html(options); }, error:function(xhr,status,errorThrown){ console.log(errorThrown); } }); } ``` 上述 JavaScript 函数会向 `/get_city_by_province` 接口发起 POST 请求并将获得的结果填充至 HTML 下拉框中[^3]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值