Ajax小案例---在数据库中查询数据
ConnectSqlDao.java部分
package connectsqldao;import java.sql.*;public class ConnectSqlDao {static private Connection conn = null;static private String driver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";static private String url = "jdbc:sqlserver://localhost:1433;DatabaseName=Xk";static private String name = "sa";static private String passwd = "sa";public static Connection connectsql() {try {Class.forName(driver);} catch (ClassNotFoundException e1) {e1.printStackTrace();}try {conn = DriverManager.getConnection(url,name,passwd);} catch (SQLException e) {e.printStackTrace();}return conn;}}
GetInfoServlet.java部分
package getinfoservlet;import java.io.IOException;import java.io.PrintWriter;import java.util.ArrayList;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 handleinfodao.InfoDao;@WebServlet("/GetInfoServlet")public class GetInfoServlet extends HttpServlet {private static final long serialVersionUID = 1L;public GetInfoServlet() {super();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {response.setContentType("text/html;charset=utf-8");String stuco = request.getParameter("stuco");ArrayList<String> infoli = InfoDao.hadle(stuco);PrintWriter out = response.getWriter();out.println(infoli.get(0));out.println(infoli.get(1));out.println(infoli.get(2));}protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {}}
InfoDao.java部分
package handleinfodao;import java.sql.*;import java.util.ArrayList;import connectsqldao.*;public class InfoDao {static private Connection conn = null;static private PreparedStatement pst = null;static private ResultSet rst = null;static private String sql = "";static private String name;static private String classno;static private String passwd;static private ArrayList<String> als;public static ArrayList<String> hadle(String stuno) {// 每执行一次查询就调用一次该方法,每调用一次该方法就重新创建一次对象,目的是清空列表中的值,只存储最新查找的值als = new ArrayList<String>();// 每调用一次该方法就赋初始值,如果不是每调用一次方法就赋初始值,那么当用户先查询存在的数据,再输入为空时也可以查到数据,因为此时// 的变量已被赋值name = "默认为空";classno = "默认为空";passwd = "默认为空";// 用户输入数据情况:空值(不输入),超出查询范围// 判断用户输入是否为空if (stuno == null | stuno.length() == 0) {als.add(name);als.add(classno);als.add(passwd);}else {sql = "select * from Student where StuNo = "+stuno+"";conn = ConnectSqlDao.connectsql();try {pst = conn.prepareStatement(sql);rst = pst.executeQuery();if (rst.next()) { //判断用户查询数据是否超出范围 超出范围时查询结果为空name = rst.getString("StuName");classno = rst.getString("ClassNo");passwd = rst.getString("Pwd");als.add(name);als.add(classno);als.add(passwd);}else { //判断用户查询数据是否超出范围als.add("超出范围");als.add("超出范围");als.add("超出范围");}} catch (SQLException e) {e.printStackTrace();}finally {if (rst != null) {try {rst.close();} catch (SQLException e) {e.printStackTrace();}}if (pst != null) {try {pst.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}if (conn != null) {try {conn.close();} catch (SQLException e) {// TODO Auto-generated catch blocke.printStackTrace();}}}}return als;}}
index.jsp部分
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%><html><head><meta charset="UTF-8"><title>Insert title here</title></head><body><p>学号:<input id="stuno" type="text"/><input type="submit" value="查询" onclick="ajaxdo()"><br/></p><table style="width:300px;height:200px;border:solid" border="1"><tr><td width="40%">姓名</td><td id="td1"></td></tr><tr><td width="40%">班级</td><td id="td2"></td></tr><tr><td width="40%">密码</td><td id="td3"></td></tr></table><script type="text/javascript">function ajaxdo(){//创建异步对象var xhr = new XMLHttpRequest();//绑定函数 当获取到查询结果后所要做的事xhr.onreadystatechange = function(){if (xhr.readyState == 4 && xhr.status == 200){//responseText方法会获取向页面输出的数据(print里的数据) 数据不会再输出到页面//将查询到的数据通过 split 方法转变为列表var infoli = xhr.responseText.split("\n")//通过不同下标将查询结果输出到不同表格document.getElementById("td1").innerText = infoli[0]document.getElementById("td2").innerText = infoli[1]document.getElementById("td3").innerText = infoli[2]}}//获取用户输入的学号var stuno = document.getElementById("stuno").value;//将学号添加到请求地址中xhr.open("get","GetInfoServlet?stuco=" + stuno,true)//发送请求xhr.send();}</script></body></html>
数据库表结构
项目结构
效果演示
