繼上篇-jquery ajax提交 本篇用ajax提交的數據去數據庫查詢

  上篇講到如何用jquery ajax提交數據至後臺,後臺接收並返回給ajax。http://www.javashuo.com/article/p-xvluussh-h.htmljavascript

      今天咱們把數據傳到數據庫去作一下查詢。話很少說,上教程。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代碼,同窗們,跟上,跟上。java

  今天基於上次的基礎上次的新建了三個包,並導入了一個祖傳的mysql的jar包:mysql

 

 

 

     

      咱們先在po包裏建立一個名爲User的java類(類名隨便本身定,只要本身能認識就行了),並在類裏定下三個字段給這三個字段建立get、set方法:jquery

 

 

 

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類:ajax

 

 

 

  回到咱們上次建立的LoginServlet類裏:
sql

package com.tiezhu.action;數據庫

import java.io.IOException;apache

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>

  所有搞定!把代碼跑起來試一下。

 

 

 

 

本次教程到此結束,謝謝觀看,若有問題,歡迎在評論區留言哦~

相關文章
相關標籤/搜索