如何实现省市区三级联动的效果

2024-05-05 08:55

1. 如何实现省市区三级联动的效果

1、在做这个小项目前的准备工作:
1.1、分析:
     由于省、市、县城(区)这些数据是存储到了MySQL数据库中的,我们要通过后台servlet获取数据库中的数据,然后再通过转发或者重定向的方式将数据呈现到前台页面中。
1.2、需要导入的jar包有:
mysql驱动包:mysql-connector-Java-5.1.7-bin.jar
c3p0数据库连接池:c3p0-0.9.2.1.jar、mysql-connector-java-5.1.7-bin.jar(c3p0依赖包)
前台c标签(需要通过遍历的方式呈现——c:forEach):jstl-1.0.2.jar、standard-1.0.1.jar(jstl依赖包)
将集合或者数组转换成json数据格式(Jackson包):jackson-annotations-2.2.1.jar、jackson-core-2.2.1.jar、jackson-databind-2.2.1.jar
前台页面需要用到jQuery,故还需要导入jquery-1.7.2.js库文件
1.3、该小项目用到的技术:
jdbc的知识、servlet的知识、jquery的知识、Ajax的知识(局部刷新)、标签的知识、EL表达式的知识、JSP的知识
2、开发过程:
2.1、准备数据源
创建一个数据库,命名为thereaction并创建三个表——province(省)、city(市)、county(县/区)
2.2后台开发
创建三个Javabean分别是Province、City、County。(由于太过简单,这里就不粘代码了)
创建Java类和c3p0连接池实现与数据库的连接:DAO.java(实现获取数据库数据的功能)、jdbctools.java(实现获取数据库连接、释放连接的功能)、c3p0-config.xml
jdbctools.java代码如下:
[java] view plain copy
package com.xiaojie.dao;  
  
import java.io.IOException;  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
  
import javax.sql.DataSource;  
  
import com.mchange.v2.c3p0.ComboPooledDataSource;  
  
public class Jdbctools {  
    private static DataSource ds=null;    
    //数据库连接池应只被初始化一次    
    static{    
        ds=new ComboPooledDataSource("helloc3p0");    
    }    
    //获取数据库连接    
    public static  Connection getConnection() throws ClassNotFoundException, SQLException, IOException{    
        return ds.getConnection();        
    }   
    public static void shifanglianjie(Connection ct, PreparedStatement ps,ResultSet rs) {   
        if(rs!=null){  
            try {  
                rs.close();  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
        if(ps!=null){  
            try {  
                ps.close();  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
        if(ct!=null){  
            try {  
                ct.close();  
            } catch (SQLException e) {  
                // TODO Auto-generated catch block  
                e.printStackTrace();  
            }  
        }  
    }  
  
}  

DAO.java的代码如下
[java] view plain copy
package com.xiaojie.dao;  
  
import java.io.IOException;  
import java.sql.Connection;  
import java.sql.PreparedStatement;  
import java.sql.ResultSet;  
import java.sql.SQLException;  
import java.util.ArrayList;  
import java.util.List;  
  
import com.xiaojie.beans.City;  
import com.xiaojie.beans.County;  
import com.xiaojie.beans.Province;  
  
public class DAO {  
    public List getprovince(String sql ,Object...args) throws ClassNotFoundException, SQLException, IOException{  
        List provinces=new ArrayList();  
        //准备去查数据库  
        Connection ct=null;  
        ct=Jdbctools.getConnection();  
        System.out.println("获取到数据库的连接了");  
        PreparedStatement ps=null;  
        ResultSet rs=null;  
        ps=ct.prepareStatement(sql);  
        for(int i=0;i<args.length;i++){  
            ps.setObject(i+1, args[i]);  
        }  
        rs=ps.executeQuery();  
        while(rs.next()){  
            provinces.add(new Province(rs.getInt("province_id"),rs.getString("province_name")));  
        }  
        Jdbctools.shifanglianjie(ct, ps, rs);  
        return provinces;  
          
    }  
    public List getcity(String sql ,Object...args) throws SQLException, ClassNotFoundException, IOException{  
        List cities=new ArrayList();  
        //准备去查数据库  
        Jdbctools jt=new Jdbctools();  
        Connection ct=null;  
        ct=jt.getConnection();  
        PreparedStatement ps=null;  
        ResultSet rs=null;  
        ps=ct.prepareStatement(sql);  
        for(int i=0;i<args.length;i++){  
            ps.setObject(i+1, args[i]);  
        }  
        rs=ps.executeQuery();  
        while(rs.next()){  
            cities.add(new City(rs.getInt("city_id"),rs.getString("city_name")));  
        }  
        jt.shifanglianjie(ct, ps, rs);  
        return cities;  
          
    }  
    public List getcounty(String sql,Object...args ) throws SQLException, ClassNotFoundException, IOException{  
        List counties=new ArrayList();  
        //准备去查数据库  
        Jdbctools jt=new Jdbctools();  
        Connection ct=null;  
        ct=jt.getConnection();  
        PreparedStatement ps=null;  
        ResultSet rs=null;  
        ps=ct.prepareStatement(sql);  
        for(int i=0;i<args.length;i++){  
            ps.setObject(i+1, args[i]);  
        }  
        rs=ps.executeQuery();  
        while(rs.next()){  
            counties.add(new County(rs.getInt("county_id"),rs.getString("county_name")));  
        }  
        jt.shifanglianjie(ct, ps, rs);  
        return counties;  
          
    }  
}  
 c3p0-config.xml的代码如下:
[html] view plain copy
  
   
       
  
    root   
        
     com.mysql.jdbc.Driver   
     jdbc:mysql:///thereaction   
      
  
    5   
  
    5   
  
    5   
      
    10   
  
    20   
  
    5   
       
   

创建servlet.java 文件
[java] view plain copy
package com.xiaojie.servlet;  
  
import java.io.IOException;  
import java.lang.reflect.Method;  
import java.sql.SQLException;  
import java.util.List;  
  
import javax.servlet.ServletException;  
import javax.servlet.annotation.WebServlet;  
import javax.servlet.http.HttpServlet;  
import javax.servlet.http.HttpServletRequest;  
import javax.servlet.http.HttpServletResponse;  
  
import com.fasterxml.jackson.databind.ObjectMapper;  
import com.xiaojie.beans.City;  
import com.xiaojie.beans.County;  
import com.xiaojie.beans.Province;  
import com.xiaojie.dao.DAO;  
/** 
 * Servlet implementation class ThreeactiondServlet 
 */  
@WebServlet("/threeactiondServlet")  
public class ThreeactiondServlet extends HttpServlet {  
    private static final long serialVersionUID = 1L;  
  
    /** 
     * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response) 
     */  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        String methodname=request.getParameter("method");    
        try {    
            Method method=getClass().getDeclaredMethod(methodname,HttpServletRequest.class,HttpServletResponse.class);    
            method.invoke(this, request,response);//调用各自的方法    
        } catch (Exception e) {    
            e.printStackTrace();    
        }  
    }  
    private DAO dao=new DAO();  
    protected void province(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException {  
        System.out.println("province的servlet进入了");  
        String sql="select province_id,province_name from province";          
        List provinces=dao.getprovince(sql);  
        request.setAttribute("provinces", provinces);  
        System.out.println(provinces);  
        //注意:这里不能用重定向的形式,因为我们好不容易在request请求域中存储了省的信息,目的是在前台页面中能够从请求域中获取到我们存在数据库中的值  
        //故这里只能用转发的方式  
        request.getRequestDispatcher("/index2.jsp").forward(request, response);  
    }  
    protected void city(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException {  
        System.out.println("city的servlet进入了");  
        String province_id=request.getParameter("province_id");  
        String sql="select city_id,city_name from city where province_id=?";  
        List cities=dao.getcity(sql,Integer.parseInt(province_id));  
        ObjectMapper mapper=new ObjectMapper();  
        String result=mapper.writeValueAsString(cities);  
        System.out.println(result);  
        response.setContentType("text/javascript");  
        response.getWriter().print(result);  
    }  
    protected void county(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, ClassNotFoundException, SQLException {  
        System.out.println("county的servlet进入了");  
        String city_id=request.getParameter("city_id");  
        String sql="select county_id,county_name from county where city_id=?";  
        List counties=dao.getcounty(sql,Integer.parseInt(city_id));  
        ObjectMapper mapper=new ObjectMapper();  
        String result=mapper.writeValueAsString(counties);  
        System.out.println(result);  
        response.setContentType("text/javascript");  
        response.getWriter().print(result);  
    }  
}

如何实现省市区三级联动的效果

2. 怎样在EXCEL中设立省市县的三级联动下拉列表

用定义名称、数据有效性的序列等实现级联菜单,如图为二级,请参考制作三级菜单:

3. 省市区三级联动(jQuery+Json)

省市区要实现三级联动,肯定要有一个级联对应关系,即哪个省下面有哪些市,哪些市下面有哪些区/县,所以在json数据中就需要使用parent、id这些字面量来标明相应的对应关系。当然不一定非要用parent,其他名称也行,只要能对应上就行。

省市区三级联动(jQuery+Json)

4. 省市区三级联动,怎么固定省份

--选择省份--
--四川省--

5. 求全国最新省市县的三级联动数据库。

http://www.zhujiangroad.com/program/SQL/73943.html
这个应该能帮助到你!

求全国最新省市县的三级联动数据库。

6. 我想做个省市县三级联动菜单,里面每一个选项都有相应的链接网页(介绍各县情况),该怎么办呢?本人菜鸟

其实网上都有你需要的,你可以先拿来看,他的全国的省市县的信息都有的 你照着做,加上网站链接就好了

7. 一张表 怎么 jquery省市区三级联动

jquery+ajax就可以搞定的
id,菜单名称,parentid(父级id),排序,描述
1    河北省        0
2    石家庄        1   
3    东城区        2
4    西城区        2
5    廊坊           1
6    河南省      0
接下来使用 jquery + ajax来实现联动
第一级:parentid = 0 的所有菜单
第二级: 一级菜单的onchange()事件根据选中的value 比如:value=1 使用ajax获取 parentid=1的菜单,
前台代码:

河北省
河南省


石家庄
廊坊


function change_1(){
var strvalue=$("#sele_1").val();
$.ajax({
type:'post',
url: "PHP函数 select_ajax_1()", 
data:{"specialty_1":strvalue},
dataType: "json",
success: function (data) {
console.log(data); //控制台输出
$('#sele_2').html(""); //清空
//读取json数据
for (var i=0;i<data.length;i++){
// 数据库的联动菜单ID 菜单名
$('#sele_2').append(""+data[i].name+"");
}
},
error:function(data){
alert("异常!");
}
})
}


后台php代码:
function select_ajax_1() {
//获取ajax传来的 specialty_1
$valueid = intval($_POST['specialty_1']);
/*
查询 parentid=$valueid的菜单
*/
//返回json数据
echo json_encode(查询结果数组);
}

一张表 怎么 jquery省市区三级联动

8. 我们在程序中经常用到 全国省市县三级联动 选择地址,那样的话 保存到数据库中是一个字段还是三个字段

三个字段的,省、市、县