上篇讲到如何用jquery ajax提交数据至后台,后台接收并返回给ajax。https://www.cnblogs.com/tiezhuxiong/p/11943328.html

今天我们把数据传到数据库去做一下查询。话不多说,上教程。

首先,我们先建立数据库:

CREATE TABLE `user` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`username` varchar(255) DEFAULT NULL,
`password` varchar(255) DEFAULT NULL,
PRIMARY KEY (`id`)
)

  

     

INSERT INTO `user`.`user`(`id`,`username`,`password`) VALUES ( NULL,'铁柱兄','666666');

  

数据库搞定了,下一步,进eclipse编辑java代码,同学们,跟上,跟上。

  今天基于上次的基础上次的新建了三个包,并导入了一个祖传的mysql的jar包:

我们先在po包里创建一个名为User的java类(类名随便自己定,只要自己能认识就好了),并在类里定下三个字段给这三个字段创建get、set方法:

package com.tiezhu.po;

public class User {
private int id;//用户的唯一标识
private String userName;//用户登录的账号(用户名)
private String Password;//密码
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getPassword() {
return Password;
}
public void setPassword(String password) {
Password = password;
} }

  

搞定User类之后,我们去serveice包里创建LoginServeice类,再去dao包里创建LoginDao类:

回到我们上次创建的LoginServlet类里:

package com.tiezhu.action;

import java.io.IOException;

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.tiezhu.po.User;
import com.tiezhu.service.LoginServeice;

@WebServlet(name="LoginServlet",urlPatterns="/login")
public class LoginServlet extends HttpServlet{

/**
*
*/
private static final long serialVersionUID = 1L;

@Override
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // TODO Auto-generated method stub
    super.doGet(req, resp);
}

@Override
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      //处理编码格式
      req.setCharacterEncoding("UTF-8");
      resp.setContentType("html/text;charset=UTF-8");
      //接受前端传来的数据
      String userName=req.getParameter("userName");
      String password=req.getParameter("password");
      System.out.println("接收到前端传来的数据:userName="+userName+"password="+password);
      //new出user对象
      User user=new User();
      //new出loginservice对象
      LoginServeice loginservice=new LoginServeice();
      //在loginservice里创建login方法,并把user,userName和password塞进login方法里
      user=loginservice.login(userName,password);

      //对user进行判断有没有值
      if(user!=null){
      resp.getWriter().print("查询成功");System.out.println("1");
      }else{
      System.out.println("0");
      resp.getWriter().print("用户不存在");
            }

      }

}

  

这时候第40行的user=loginservice.login(userName,password);中的login会报错,这是因为这个方法在loginservice中还不存在。

把鼠标放到login上面,第一个提示工具就会自动给我们去创建这个方法了。

现在我们进入LoginServeic类里,继续我们的代码:

package com.tiezhu.service;

import org.apache.tomcat.jni.User;

import com.tiezhu.dao.LoginDao;

public class LoginServeice {

	public User login(String userName, String password) {
          User user=null;
//new出dao对象
LoginDao dao=new LoginDao();
//在dao里创建login方法,并把userName和password塞进login方法里
user=dao.login(userName,password);//这个时候代码会走进dao层,等dao层里的login方法走完,回来再走return
return user;
} }

  这个时候user=dao.login(user,userName,password);里的login会报错,还是用同样的方法,鼠标放上去,根据提示,点击第一个提示,工具自动在dao里给我们创建好login方法。

现在不急着去编写LoginDao类。我们先在dao包里创建一个BaseDao的java类。

package com.tiezhu.dao;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; public class baseDao {
//mysql驱动包
private static String driver="com.mysql.jdbc.Driver";
//数据库地址,3306是端口号,user是数据库的库名
private static String url="jdbc:mysql://localhost:3306/user";
//数据库账号
private static String user="root";
//数据库密码
private static String password="root";
//sql连接
Connection conn = null; /**
* 建立连接
*/
public Connection getConnection(){
//如果conn为空,则去建立连接
if(conn==null){
try {
//1.加载驱动
Class.forName(driver);System.out.println("加载驱动成功");
//2.建立连接
conn=DriverManager.getConnection(url, user, password);System.out.println("建立连接中...");
} catch (Exception e) {
e.printStackTrace();
} }
System.out.println("连接数据库成功");
return conn; }
/**
* 关闭连接
*/
public void closeAll(Connection conn,PreparedStatement pstm,ResultSet rs){
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(pstm!=null){
try {
pstm.close();System.out.println("关闭pstm成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();System.out.println("关闭conn成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}

  友情提示:baseDao打的所有包必须是sql的不要去打其他的包,要不然就报错。

  现在我们去LoginDao里去:

package com.tiezhu.dao;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

import com.tiezhu.po.User;

public class LoginDao extends baseDao{

public User login( String userName, String password) {
    //这里定义了user,给后面用的
    User user=null;
    //1定义Connection
    Connection conn = null;
    //2.定义PreparedStatement
    PreparedStatement pstm = null;
    //3.查询需定义ResultSet
    ResultSet rs = null;

    try {
      conn=this.getConnection();
      String sql="select * from user where username='"+userName+"' and password='"+password+"'";
      pstm = conn.prepareStatement(sql);
      System.out.println(sql);
      rs=pstm.executeQuery();
      while (rs.next()) {
      //在这里new出了user,给下面要把从数据中查询出来的值set进user里面
      user=new User();
      //从数据库查询出来的set进user类
      user.setId(rs.getInt("id"));
      user.setUserName(rs.getString("username"));
      user.setPassword(rs.getString("password"));
      System.out.println(user.getUserName());
        }
    System.out.println("dao层走到尽头,把user送回service层");
      } catch (SQLException e) {
    // TODO Auto-generated catch block
    e.printStackTrace();
      }finally {
      this.closeAll(rs,conn, pstm);//释放数据连接
    }
    //将user返回到service层里。
    return user;
   }

}

  JAVA类搞定!我们回到jsp界面,在这里我要跟大家道个歉,因为上次写的太快了,没注意jsp写错了,现在在这里纠正一下:

    上次的错误点,我把上传的userName加了引号,导致最后后台得到数据就是userName,而不是用户输入的值,也同时提醒一下大家以后写代码的时候细心一点哦(现在已经改回来了):

  这次我们的jsp中ajax有一些变动,代码贴出来:

<%@ page language="java" contentType="text/html; charset=UTF-8"
pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script src="https://cdn.staticfile.org/jquery/2.1.1/jquery.min.js"></script>
<title>Insert title here</title>
</head>
<body>
<input type="text" id="userName"/>
<input type="text" id="password"/>
<a onclick="btnConfirm()">点我提交</a>
<script type="text/javascript"> function btnConfirm(){//a标签中的点击事件
var userName=$("#userName").val();//通过id获取输入框中用户输入的值
var password=$("#password").val();
$.ajax({
type : 'post',
url : '${pageContext.request.contextPath}/login',
//这里的/login对应LoginServlet类中注解的urlPatterns="/login"
data:{'userName':userName,'password':password},
traditional : true,
async : false,
dataType: 'text',
success : function(data){//成功的事件
alert(data);
},
error : function(data){//失败的事件
alert(data);
}
});
}
</script>
</body>
</html>

  全部搞定!把代码跑起来试一下。

本次教程到此结束,谢谢观看,如有问题,欢迎在评论区留言哦~

继上篇-jquery ajax提交 本篇用ajax提交的数据去数据库查询的更多相关文章

  1. 继上篇后的Excel批量数据导入

    上篇Excel动态生成模板,此篇将借用此模板进行Excel数据的批量导入. 说明:由于数据库中部分数据储存的是编码或者Id,因此,这里就需要用到上篇中的全局数据,判断是否有数据,有数据直接使用,没有数 ...

  2. ajax提交手机号去数据库验证并返回状态值

    <script type="text/javascript"> $(function(){ $('.agree_regi').click(function(){ var ...

  3. jQuery获取表格隐藏域与ajax请求数据结合显示详情

    0.表格样式

  4. SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 后端篇(五): 数据表设计、使用 jwt、redis、sms 工具类完善注册登录逻辑

    (1) 相关博文地址: SpringBoot + Vue + ElementUI 实现后台管理系统模板 -- 前端篇(一):搭建基本环境:https://www.cnblogs.com/l-y-h/p ...

  5. 深入理解ajax系列第九篇——jQuery中的ajax

    前面的话 jQuery提供了一些日常开发中需要的快捷操作,例如load.ajax.get和post等,使用jQuery开发ajax将变得极其简单.这样开发人员就可以将程序开发集中在业务和用户体验上,而 ...

  6. jquery序列化from表单使用ajax提交返回json数据(使用struts2注解result type = json)

    1.action类引入struts2的"json-default"拦截器栈 @ParentPackage("json-default") //示例 @Paren ...

  7. jQuery实现form表单基于ajax无刷新提交方法详解

    本文实例讲述了jQuery实现form表单基于ajax无刷新提交方法.分享给大家供大家参考,具体如下: 首先,新建Login.html页面: <!DOCTYPE html PUBLIC &quo ...

  8. 深入理解ajax系列第八篇——表单提交

    前面的话 在以前,网站的用户与后端交互的主要方式是通过HTML表单的使用.表单的引入在1993年,由于其简单性和易用性,直到电子商务出现之前一直保持着重要位置.理解表单提交,对于更深入地理解ajax是 ...

  9. jquery如何实现表单post方式提交

    jquery如何实现表单post方式提交 一.总结 一句话总结:即使js给form对象提供了submit()方法,那也不意为表单中可以不写提交按钮这个元素,即form表单依然需要五脏俱全才可以使用js ...

随机推荐

  1. 斯坦福机器学习课程 Exercise 习题二

    Exercise 2: Linear Regression 话说LaTex用起来好爽 Matlab代码 迭代并且画出拟合曲线 Linear regression 公式如下 hθ(x)=θTx=∑i=0 ...

  2. Charles抓包工具的使用(一)

    前提:charles的说明 Charles其实是一款代理服务器,通过过将自己设置成系统(电脑或者浏览器)的网络访问代理服务器,然后截取请求和请求结果达到分析抓包的目的.该软件是用Java写的,能够在W ...

  3. MySQL基础篇(3)常用函数和运算符

    一.字符串函数(索引位置都从1开始) CONCAT(S1,S2,...Sn): 连接S1,S2,...Sn为一个字符串,任何字符串与NULL进行连接的结果都是NULL INSERT(str,x,y,i ...

  4. django-Views之request(二)

    book/views.py def index(request): http_list = { '<h1>请求协议: <span style="color:red" ...

  5. 蓝桥杯基础练习 Huffuman树

    基础练习 Huffuman树 问题描述 Huffman树在编码中有着广泛的应用.在这里,我们只关心Huffman树的构造过程. 给出一列数{pi}={p0, p1, -, pn-1},用这列数构造Hu ...

  6. python小练习--模拟用户登录,(3次重试机会,登录成功展示登录账号密码)

    知识点使用:1.格式化输出的两种方法---% .formate 2.while循环的使用,及跳出循环的两种方法---break(跳出循环体).continue(结束本次循环,继续下次循环) 3.if条 ...

  7. 【已解决】ArcGIS Engine无法创建拓扑的问题(CreateTopology)

    也许,你的问题是这样的 ①System.Runtime.InteropServices.COMException:"未找到拓扑." ②myTopology结果是null,程序跳转到 ...

  8. MIT线性代数:10.4个基本子空间

  9. Mybatis:配置解析

    配置解析  mybatis-config.xml(Mybatis核心配置文件)深深影响了Mybatis行为的设置和属性信息. 能配置的的内容 当然,并不是所有都是我们经常使用到的,下面选择经常使用的配 ...

  10. [Java]Java类和对象内存分配详解

    描述 代码说明: 一.当Person p1 = new Person();第一次被调用时需要做两件事: 1.先判断类加载器是否加载过Person类,如果没有则加载到Person类型到方法区 2.在堆中 ...