现在有一个select和一个input,通过input里输入的值,来对数据库进行模糊或精确查询,在把数据库返回的值,在select里面显示

解决方案 »

  1.   

    <%@ page import="java.sql.*"%>
    <input type="text" name="aaa"><select name="slt">
    <%
    DBTools dbt = new DBTools(); //这个类是用来连接数据库的,要自己写
    Connection con = null;
    Statement stmt = null;
    ResultSet rs = null;String sql = "";
    String str = request.getParameter("aaa");
    if(str!="") {
        sql = "select * from xxx where xx like '%" + str + "%'";    con = dbt.getConnection();
        stmt = con.createStatement();
        rs = stmt.excuteQuery(sql);    while(rs.next()) {
    %>
        <option value=""><%=rs.getString(1)%></option>   //value的值自己取,rs那里也自己改
    <%
        }
    }
    rs.close();
    stmt.close();
    con.close();
    %></select>
    基本如此,该加try-catch的地方自己加,需要自己写的地方自己写,上面只是一个例子
      

  2.   

    import ...;//导入相应的包public ExampleServlet extend HttpServlet{
     public void doGet(HttpServletRequest req, HttpServletResponse res) 
      throws ServletException, IOException{
      String strValue = req.getParameter("value");
     String[] strResultArr = null;//保存查询结果
      ...//这是数据库查询的代码,应该不用我写了吧!
     response.setContentType("text/xml");
      response.setCharacterEncoding("UTF-8");//如果中文乱码就换成GB2312
      StringBuffer xmlObj = new StringBuffer();
      xmlObj.append("<?xml version=\"1.0\" encoding=\"UTF-8\"?>");//如果中文乱码就换成GB2312  
      if (strResultArr != null && strResultArr.length > 0){
       xmlObj.append("<ROOT>");
       for(int i = 0; i < strResultArr.length; i++){
        xmlObj.append("<VALUE>" + strResultArr[i] + "</VALUE>");
       }
       xmlObj.append("</ROOT>");
      }else{
       xmlObj.append("<ROOT/>");
      }
     PrintWriter out = response.getWriter();
      out.println(xmlObj.toString());
      out.close();
     }
    }<script lanaguage="javascript">
     <!--
       var xmlHttp;
       if (window.XMLHttpRequest){
        xmlHttp = new window.XMLHttpRequest();
       }else if (window.ActiveXObject){
        xmlHttp = new windowActiveXObject("Microsoft.XMLHTTP");
       }
       function search(value){
        var url = "?value=" + value;//自己在url里加入地址
        xmlHttp.open("GET", url, true);
        xmlHttp.onreadystateschange = callback;
        xmlHttp.send(null);
       }
       function callback(){
        if (xmlHttp.readyStates == 4){
         if (xmlHttp.status == 200){
          buildSelect();
         }else{
          alert("异常原因:" + xmlHttp.statusText);
         }
        }
       }
       function buildSelect(){
        var xmlObj = xmlHttp.responseXML;
        var root = xmlObj.documentElement;//得到xml对象的根结点
        var item = document.getElementById("showResult");
        if (root.childNodes.length > 0){
        for(var i = 0; i < root.childNodes.length; i++){
         var op = document.createElement("option");
         var txt =document.createTextNode(root.childNodes[i].text);
         op.setAttribute("value", root.childNodes[i].text);
         item.appendChild(op);
         op.appendChild(txt);
        }
       }
      }
     //-->
    </script>
    <input type="text" id="val" onkeyup="search(this.value);"/>
    <select id="showResult"></select>
      

  3.   

    这个问题在页面中用一个隐藏的Frame解决最好。显示页面不需要刷新,否则页面中如果有其他输入的话一刷新页面其他输入内容就被清空了。具体解决办法是:在当前页面中加入一个隐藏的Frame:
    <IFRAME id="autoSubmit" name="autoSubmit" style="DISPLAY:none;"></IFRAME>
    然后在input中添加一个onblur事件,当input中输入完某值后触发onblur事件,将当前页面提交到上面的Frame中的某个Jsp中,这个Jsp根据Input内容进行后台数据库的查询,然后用JavaScript对当前显示页面的Select进行动态赋值说明:用window.parent.document.getElementById("SelectId")可以获得当前显示页面的Select对象。
      

  4.   

    修正PrintWriter out = response.getWriter();
    应该是PrintWriter out = res.getWriter();
      

  5.   

    楼主不厚道
    我是用AJAX写的,说什么技术也比较先进!