省市聯動資料庫
⑴ 用c#怎樣實現省市縣三級聯動
用ajax嘛,省市縣都保存到數據裡面便於維護。
⑵ 怎樣用js實現省市聯動,數據是從資料庫讀取 謝謝了
省市聯動,要去讀資料庫就慢了點,而且用的資源也多
由於省市數據是固定的,通常,我會獨立定義一個js文件,裡面是一個json數據,分級存儲省市數據,每個地區都有一個六位的代碼,就是你身份證的前六位,那是精確到縣級的~
當然,如果你只需要到地級市,那就弄兩級的就行啦
js讀取js,是很快的~
⑶ 如何獲取省市聯動的值並寫入資料庫
<script type="text/javascript" src="city.js"></script>
<select name="province" onChange="set_city(this, this.form.city);">
<option value="0">選擇省<慧鬧/option>
<option value="北京市">北京市</option>
<option value="上海市">上海市</option>
<option value="天津市">天津市</option>
<option value="重慶市">重慶市</option>
<option value="河北省">河北省</option>
<option value="山西省">山西省</option>
...
</select>
<select name="city" id="citys" >
<option value="0">選擇城市</option>
</select>
city.js文件:
cities = new Object();
cities['北京市']=new Array('北京市區', '北京市轄區');
cities['上海市']=new Array('上海市區', '上海市轄區');
cities['天津市']=new Array('天津市區', '天津市轄區');
cities['重慶市']=new Array('重慶市區', '重慶市轄區');
cities['中國台灣']=new Array('中國台灣');
cities['中國香港']=new Array('中國香港');
cities['中國澳門']=new Array('中國澳門');
cities['河北省']=new Array('石家莊', '張家口市', '承德市', '秦皇島市', '唐山市', '廊坊市', '保定市', '滄州市', '衡水市', '邢台市', '邯鄲市');
cities['山西省']=new Array('太原市', '大同市', '朔州市', '陽泉市', '長治市', '晉明岩城市', '忻州地區', '呂梁地區', '晉中市', '臨汾地區', '運城地區');
cities['遼寧省']=new Array('沈陽市', '朝陽市', '阜新市', '鐵嶺市', '撫順市', '本溪市', '遼陽市', '鞍山市', '丹東市', '大連市', '營口市', '盤錦市', '錦州市', '葫蘆島市');
cities['吉林省']=new Array('長春市', '白城市', '松原市', '吉林市', '四平市', '遼源市', '通化市', '白山市', '延邊朝鮮族自治州');
...
function set_city(province, city)
{
var pv, cv;
var i, ii;
pv=province.value;
cv=city.value;
city.length=1;
if(pv=='0') return;
if(typeof(cities[pv])=='undefined') return;
for(i=0; i<cities[pv].length; i++)
{ ii = i+1;
city.options[ii] = new Option();
city.options[ii].text = cities[pv][i];
city.options[ii].value = cities[pv][i];
}}
function cha(){
if (document.myform.u_username.value=="")
{
alert("用戶名不能為空!");
}
else
{var str_cha = document.myform.u_username.value;
location.href="激碧御cha.aspx?str=" + str_cha;
}}
由於網路限制了輸入字數,所以上面的省市我都沒寫全,你自己去修改就可以了
⑷ 省市區 地址聯動 數據怎麼創建
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
package com.xiaojie.;
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
package com.xiaojie.;
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<Province> getprovince(String sql ,Object...args) throws ClassNotFoundException, SQLException, IOException{
List<Province> provinces=new ArrayList<Province>();
//准備去查資料庫
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<City> getcity(String sql ,Object...args) throws SQLException, ClassNotFoundException, IOException{
List<City> cities=new ArrayList<City>();
//准備去查資料庫
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<County> getcounty(String sql,Object...args ) throws SQLException, ClassNotFoundException, IOException{
List<County> counties=new ArrayList<County>();
//准備去查資料庫
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
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
<named-config name="helloc3p0">
<!-- 連接數據源的基本屬性 -->
<property name="user">root</property>
<property name="password"></property>
<property name="driverClass">com.mysql.jdbc.Driver</property>
<property name="jdbcUrl">jdbc:mysql:///thereaction</property>
<!-- 若資料庫中連接數不足時,一次向資料庫伺服器申請多少個連接 -->
<property name="acquireIncrement">5</property>
<!-- 初始化資料庫連接池時連接的數量 -->
<property name="initialPoolSize">5</property>
<!-- 資料庫連接池中的最小的資料庫連接數 -->
<property name="minPoolSize">5</property>
<!-- 資料庫連接池中的最大的資料庫連接數 -->
<property name="maxPoolSize">10</property>
<!-- c3p0資料庫連接可以維護的statement的個數 -->
<property name="maxStatements">20</property>
<!-- 每個連接同時可以使用的statement對象的個數 -->
<property name="maxStatementsPerConnection">5</property>
</named-config>
</c3p0-config>
創建servlet.java 文件
[java] view plain
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;
/**
* 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 =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<Province> provinces=.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<City> cities=.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<County> counties=.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);
}
}