主頁 > 知識庫 > JSP使用JDBC完成動態(tài)驗證及采用MVC完成數(shù)據(jù)查詢的方法

JSP使用JDBC完成動態(tài)驗證及采用MVC完成數(shù)據(jù)查詢的方法

熱門標(biāo)簽:電子圍欄 阿里云 服務(wù)器配置 Linux服務(wù)器 銀行業(yè)務(wù) Mysql連接數(shù)設(shè)置 科大訊飛語音識別系統(tǒng) 團購網(wǎng)站

本文實例講述了JSP使用JDBC完成動態(tài)驗證及采用MVC完成數(shù)據(jù)查詢的方法。分享給大家供大家參考。具體如下:

一、目標(biāo):

① 掌握J(rèn)DBC鏈接數(shù)據(jù)庫的基本過程;
② 掌握使用JDBC進(jìn)行數(shù)據(jù)查詢。

二、主要內(nèi)容:

① 在上一次的實例基礎(chǔ)上,通過連接數(shù)據(jù)庫完成用戶登錄功能,介紹JDBC的基本用法;
② 通過顯示所有用戶信息進(jìn)一步介紹JDBC的用法和查詢結(jié)果的處理。

1、JDBC概念

Java Database Connectivity的縮寫,用于連接Java應(yīng)用程序與各種關(guān)系數(shù)據(jù)庫的標(biāo)準(zhǔn)接口。對于編程人員來說,連接任何數(shù)據(jù)庫都是相同的。

2、要使用JDBC開發(fā)應(yīng)用需要哪些準(zhǔn)備工作?

安裝數(shù)據(jù)庫,包括數(shù)據(jù)庫表的創(chuàng)建;
根據(jù)數(shù)據(jù)庫的類型,得到數(shù)據(jù)庫的JDBC驅(qū)動程序,不同的數(shù)據(jù)庫管理系統(tǒng)需要不同的JDBC驅(qū)動程序,并且不同版本的數(shù)據(jù)庫管理系統(tǒng)需要的驅(qū)動程序有可能不同的;這里使用Oracle數(shù)據(jù)庫,驅(qū)動程序需要放在WEB-INF/lib下面。
數(shù)據(jù)庫的相關(guān)信息:數(shù)據(jù)庫的IP地址,服務(wù)的端口號,數(shù)據(jù)庫的名字,連接數(shù)據(jù)庫的用戶名和密碼。

3、 舉例:使用數(shù)據(jù)庫對用戶登錄信息進(jìn)行驗證。

需要修改User.java中驗證用戶信息的方法。

1)在類的前面增加了一個import語句:

復(fù)制代碼 代碼如下:
import java.sql.*;

2)增加的后的check方法如下:

public boolean check()
{
/*
   if(username==null || userpass==null)
     return false;
   if(username.equals("zhangsan")  userpass.equals("lisi"))
   {
     return true;
   }else{
     return false;
   }
*/
   Connection con = null;
   Statement stmt = null;
   ResultSet rs = null;
   boolean b = true;
   try{
     // 指出連接數(shù)據(jù)庫所需要的驅(qū)動程序
     Class.forName("oracle.jdbc.driver.OracleDriver");
    // 建立與數(shù)據(jù)庫之間的連接
// myserver修改為數(shù)據(jù)庫服務(wù)器IP,mydb為數(shù)據(jù)庫名
    con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");
    // 編寫查詢數(shù)據(jù)庫信息的SQL語句
    String sql="select * from usertable where username='"+username+"' and userpass='"+userpass+"'";
    System.err.println(sql);
    // 創(chuàng)建語句對象,用于執(zhí)行SQL語句
    stmt = con.createStatement();
    // 執(zhí)行SQL語句得到結(jié)果集
    rs = stmt.executeQuery(sql);   
    // 判斷rs中是否有數(shù)據(jù)
    if(rs.next())
     b = true;
    else
     b = false;
   }catch(Exception e){
     System.out.println(e.getMessage());
   }
   finally{
    // 關(guān)閉相關(guān)對象
    if(rs!=null) try{ rs.close(); }catch(Exception ee){}
    if(stmt!=null) try{ stmt.close(); }catch(Exception ee){}
    if(con!=null) try{ con.close(); }catch(Exception ee){}
   }
   return b;
}

4、運行測試

可以使用數(shù)據(jù)庫中的用戶名和口令進(jìn)行登錄。

5、向頁面?zhèn)鬟f查詢結(jié)果

很多時候,客戶端需要從服務(wù)器端得到數(shù)據(jù)并顯示,因為數(shù)據(jù)的查詢是由JavaBean完成的,對JavaBean的調(diào)用是通過Servlet完成的,Servlet中可以得到查詢的結(jié)果,但是顯示信息是由JSP頁面完成的,如何把Servlet中查詢的信息傳遞給JSP頁面呢?

前面介紹過可以通過request、session和application傳遞信息,因為可以讓Servlet和JSP處于相同的請求,所以3個對象都可以使用。但是因為session和application的保存時間比較長,容易造成服務(wù)器資源的浪費,所以通常采用request存儲。

下面通過查詢并顯示所有信息的功能來介紹具體用法。需要完成的工作如下:

① 在User.java中添加查詢所有用戶信息的方法;
② 編寫查詢所有用戶信息的控制器;
③ 編寫顯示信息的JSP頁面。

6、 在User.java中添加方法

查詢所有用戶信息的方法如下:

public ArrayList getAllUser()
{
   Connection con = null;
   Statement stmt = null;
   ResultSet rs = null;
   ArrayList users = new ArrayList();
   try{
    // 指出連接數(shù)據(jù)庫所需要的驅(qū)動程序
    Class.forName("oracle.jdbc.driver.OracleDriver");
    // 建立與數(shù)據(jù)庫之間的連接
    con = DriverManager.getConnection("jdbc:oracle:thin:@myserver:1521:mydb","scott","tiger");
    // 編寫查詢數(shù)據(jù)庫信息的SQL語句
    String sql="select * from usertable";
    // 創(chuàng)建語句對象,用于執(zhí)行SQL語句
    stmt = con.createStatement();
    // 執(zhí)行SQL語句得到結(jié)果集
    rs = stmt.executeQuery(sql);   
    // 遍歷結(jié)果集
    while(rs.next())
    {
      String username = rs.getString(1);
      String userpass = rs.getString(2);
      // java.util.Date birthday = rs.getDate(3);
      // int age = rs.getInt(4);
      User user = new User();
      user.setUsername(username);
      user.setUserpass(userpass);
      users.add(user);
    }
   }catch(Exception e){
     System.out.println(e.getMessage());
   }
   finally{
    // 關(guān)閉相關(guān)對象
    if(rs!=null) try{ rs.close(); }catch(Exception ee){}
    if(stmt!=null) try{ stmt.close(); }catch(Exception ee){}
    if(con!=null) try{ con.close(); }catch(Exception ee){}
   }   
   return users;
}

需要在類的前面引入java.util包,代碼如下:

復(fù)制代碼 代碼如下:
import java.util.*;

7、 編寫控制器

代碼如下:

package servlet;
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import javabean.*;
import java.util.*;
public class GetAllUser extends HttpServlet
{
  public void doGet(HttpServletRequest request,HttpServletResponse response)
  throws IOException,ServletException
  {
   // 第一步:獲取用戶的輸入信息,這里不需要
   // 第二步:調(diào)用JavaBean
   User user = new User();
   ArrayList users=null;
   users = user.getAllUser();
   // 第三步:傳值
   request.setAttribute("users",users);
   // 第四步:選擇一個界面對用戶進(jìn)行響應(yīng)
   String forward="userlist.jsp";
   RequestDispatcher rd = request.getRequestDispatcher(forward);
   rd.forward(request,response);
  }
  public void doPost(HttpServletRequest request,HttpServletResponse response)
  throws IOException,ServletException
  {
   doGet(request,response);
  }
}

這里假設(shè)使用userlist.jsp對用戶進(jìn)行響應(yīng)。

8、 配置控制器

在Web.xml中添加如下代碼:

  servlet>
   servlet-name>getAllUser/servlet-name>
   servlet-class>servlet.GetAllUser/servlet-class>
  /servlet>
  servlet-mapping>
   servlet-name>getAllUser/servlet-name>
   url-pattern>/getAllUser/url-pattern>
  /servlet-mapping>

9、 編寫userlist.jsp響應(yīng)

%@ page contentType="text/html;charset=gb2312"%>
%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>
c:forEach var="user" items="${users}">
  用戶名:${user.username} 口令:${user.userpass} br>
/c:forEach>

這里的c:forEach標(biāo)簽用于循環(huán)處理,items指出循環(huán)遍歷的集合,var聲明循環(huán)變量,表示集合中的一個元素。循環(huán)體中通過表達(dá)式語言顯示用戶信息。

10、運行測試

http://127.0.0.1:8080/ch7/getAllUser

希望本文所述對大家的JSP程序設(shè)計有所幫助。

您可能感興趣的文章:
  • Java中JDBC實現(xiàn)動態(tài)查詢的實例詳解

標(biāo)簽:廣元 江蘇 大理 棗莊 衡水 衢州 萍鄉(xiāng) 蚌埠

巨人網(wǎng)絡(luò)通訊聲明:本文標(biāo)題《JSP使用JDBC完成動態(tài)驗證及采用MVC完成數(shù)據(jù)查詢的方法》,本文關(guān)鍵詞  ;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 收縮
    • 微信客服
    • 微信二維碼
    • 電話咨詢

    • 400-1100-266