`

Java Web快速入门——第7讲

阅读更多

1、共享连接数据库的代码

    连接数据库的基本过程:
    1)加载驱动程序;
    2)创建连接;
    3)编写SQL语句;
    4)创建语句对象;
    5)对参数赋值;
    6)执行SQL 语句;
    7)对结果进行处理;
    8)关闭对象。

    对于不同的SQL的执行,不同的地方:
    SQL语句;
    参数;
    结果的处理方式;

    提取相同部分分别编写成方法:

   Connection con = null;
   PreparedStatement stmt = null;
   ResultSet rs = null;
   String driverClass = "sun.jdbc.odbc.JdbcOdbcDriver";
   String url = "jdbc:odbc:bookstore";

   // 完成连接的创建,相当于第1.2步
   public Connection getConnection() throws Exception{
      Class.forName(driverClass); // 加载驱动程序
      if(con == null)
         con = DriverManager.getConnection(url,"","");
      return con;
   }

   // 创建语句对象
   public PreparedStatement createStatement(String sql) throws Exception{
      stmt = getConnection().prepareStatement(sql);
      return stmt;
   }  

   // 执行有结果集返回的方法
   public ResultSet executeQuery() throws Exception{
      rs = stmt.executeQuery();
      return rs;
   }

   // 执行没有结果集返回的方法
   public int executeUpdate() throws Exception{
      return stmt.executeUpdate();
   }

   // 关闭对象
   public void close(){
      if(rs != null)
         try{ rs.close();  }catch(Exception e){}
      if(stmt != null)
         try{ stmt.close();  }catch(Exception e){}
      if(con != null)
         try{ con.close();  }catch(Exception e){}
   }

2、修改上一次课的添加功能,使用这些共享方法

      String sql = "insert into usertable2 values(?,?,?,?,?,?,?)";
      boolean success = true;   
      try{
         // 创建语句对象
         createStatement(sql);
        
         // 对SQL语句中参数赋值
         stmt.setString(1,username);
         stmt.setString(2,userpass);
         stmt.setString(3,sex);
         stmt.setString(4,fav);
         stmt.setString(5,degree);
         stmt.setString(6,comment);
         stmt.setString(7,email);

         // 执行SQL语句
         int n = executeUpdate();
         // 执行没有结果集返回的SQL语句使用executeUpdate方法,方法的返回值是整数,表示操作成功的记录数
         if(n==0)
            success = false;
      }catch(Exception e){
         success = false;
         System.out.println(e.getMessage());
      }finally{
         close();
      } 
      return success;
3、查询所有图书

   1)创建图书表
   create table books(
      bookid varchar(10) primary key,
      bookname varchar(30),
      author varchar(20),
      price float,
      publisher varchar(20)
   )
   插入一些模拟数据

insert into books values('00001','Java','zhangsan',20,'电子工业')
insert into books values('00002','JSP','lisi',22,'人民邮电')
insert into books values('00003','Java EE','wang',30,'人民邮电')

   2)V部分
   V主要与人进行交互,要考虑输入和输出
   输入:在导航条中添加“查看所有图书”的超链。

<a href="findAllBooks">显示所有图书</a>

   输出:显示所有图书信息的JSP文件。
文件名:books.jsp
文件内容:
<%@ page contentType="text/html;charset=gb2312"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core"%>

<%@ include file="header.jsp"%>

   <tr>
      <td>
          <table align="center" border="1">
             <tr>
                <td>图书编号</td><td>图书名称</td><td>作者</td><td>价格</td><td>出版社</td>
             </tr>
             <!--  c:forEach用于循环控制,items属性指出要循环遍历的集合,var定义一个循环变量,表示集合中的一个元素 -->
             <c:forEach var="book" items="${books}">
                <tr>
                    <td>${book.bookid}</td>
                    <td>${book.bookname}</td>
                    <td>${book.author}</td>
                    <td>${book.price}</td>
                    <td>${book.publisher}</td>
                </tr>
             </c:forEach>
          </table>
      </td>
   </tr>
</table>

   3)M部分
   完成功能:从数据库中查询所有的图书。
文件名:BookBean.java
文件内容:
package bean;

import java.sql.*;
import java.util.ArrayList;

public class BookBean extends Base{

   // 描述图书的属性
   private String bookid;
   private String bookname;
   private String author;
   private float price;
   private String publisher;

   // 编写对乘员进行操作的方法
   public void setBookid(String bookid){
      this.bookid = bookid;
   }

   public String getBookid(){
      return bookid;
   }

   public void setBookname(String bookname){
      this.bookname = bookname;
   }

   public String getBookname(){
      return bookname;
   }

   public void setAuthor(String author){
      this.author = author;
   }

   public String getAuthor(){
      return author;
   }

   public void setPrice(float price){
      this.price = price;
   }
  
   public float getPrice(){
      return price;
   }

   public void setPublisher(String publisher){
      this.publisher = publisher;
   }

   public String getPublisher(){
      return publisher;
   }  

   public ArrayList findAllBooks(){
      ArrayList books = new ArrayList();
      String sql = "select * from books";
      try{
         createStatement(sql);
         rs = executeQuery();
         // 使用while循环遍历结果集
         while(rs.next())
         {
            // 使用rs的getString方法,以字符串的形式获取第一列,参数也可以是列的名字
            // 可以得到当前记录的每一列
            String tempBookid = rs.getString(1);
            String tempBookname = rs.getString(2);
            String tempAuthor = rs.getString(3);
            float tempPrice = rs.getFloat(4);
            String tempPublisher = rs.getString(5);

            // 创建图书对象
            BookBean book = new BookBean();
            book.setBookid(tempBookid);
            book.setBookname(tempBookname);
            book.setAuthor(tempAuthor);
            book.setPrice(tempPrice);
            book.setPublisher(tempPublisher);

            // 把书添加到链表中
            books.add(book);
         }
      }catch(Exception e){
         System.out.println(e.toString());
      }finally{
         close();
      }
      return books;
   }
}
   4)C部分
   控制器:4句话。本功能只用到3句。
文件名:FindAllBooks。
文件内容:
package servlet;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

import bean.*;
import java.util.ArrayList;

public class FindAllBooks extends HttpServlet
{
  public void doGet(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {

        // 第二句话:调用JavaBean,创建对象、初始化、然后调用方法
        BookBean book = new BookBean();
        ArrayList books = book.findAllBooks();

        // 第三句话:向页面传递信息,第一个参数是使用的名字,应该和显示时候使用的名字一致,第二个参数传递的值本身
        request.setAttribute("books",books);

        // 第四句话:转向响应界面
        RequestDispatcher rd = request.getRequestDispatcher("books.jsp");
        rd.forward(request,response); // 完成跳转

  }

  public void doPost(HttpServletRequest request,HttpServletResponse response) throws IOException,ServletException
  {
     doGet(request,response);
  }

}
在web.xml中进行配置
   <servlet>
      <servlet-name>findAllBooks</servlet-name>
      <servlet-class>servlet.FindAllBooks</servlet-class>
   </servlet>

   <servlet-mapping>
      <servlet-name>findAllBooks</servlet-name>
      <url-pattern>/findAllBooks</url-pattern>
   </servlet-mapping>

分享到:
评论

相关推荐

    Java Web编程宝典-十年典藏版.pdf.part2(共2个)

    第7章 动态网站之灵魂 ——数据库应用开发 7.1 本章学习任务 7.1.1 本章知识体系. 7.1.2 实例开发任务 7.2 My SQL数据库的安装与使用 7.2.1 安装并配置MyS QL 7.2.2 安装MySQLGUITool 7.2.3 连接MySQLAdministrator....

    Java Web基础入门第七十九讲 Filter(过滤器)——Filter(过滤器)常见应用(三):权限管理系统(下)-附件资源

    Java Web基础入门第七十九讲 Filter(过滤器)——Filter(过滤器)常见应用(三):权限管理系统(下)-附件资源

    Java Web入门经典第二章源代码

    全书共分4篇19章,其中,第一篇为“起步篇”,主要包括开启Java Web之门、不可不知的客户端应用技术、驾驭Java Web开发环境、Java Web开发必修课之JSP语法等内容;第二篇为“核心篇”,主要包括程序开发效率之利器...

    深入体验Java Web开发内幕

    6.7 获取请求消息的实体内容  6.8 利用请求域属性传递信息  6.9 请求参数的中文读取问题  6.10 思考与实践 第7章 会话与状态管理  7.1 Web应用中的会话与会话状态  7.2 Cookie  7.3 在...

    Java语言程序设计教程(Java 7)——入门与提高篇06

    第6章介绍了几个Java的高级应用,包括多线程、网络编程和GUI编程。多线程,介绍Java如何对多线程提供支持,以及如何使用Java编写多线程应用;网络编程,介绍如何通过HTTP协议访问Web应用,如何通过Socket编程实现C/S...

    学通Java的24堂课

    第7堂课 字符串处理 189 第2部分 提高篇 第8堂课 类的继承与多态特性 219 第9堂课 其他类特性与异常处理 257 第10堂课 swing编程基础 283 第11堂课 多线程编程 319 第12堂课 事件处理的应用 345 第13堂课 ...

    JAVA上百实例源码以及开源项目源代码

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    JAVA上百实例源码以及开源项目

     Java局域网通信——飞鸽传书源代码,大家都知道VB版、VC版还有Delphi版的飞鸽传书软件,但是Java版的确实不多,因此这个Java文件传输实例不可错过,Java网络编程技能的提升很有帮助。 Java聊天程序,包括服务端和...

    android开发入门与实战(下)

    第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3 编程实现 5.1.4 运行项目 5.2 调试项目 5.2.1 设置断点 5.2.2 Debug项目 5.2.3 ...

    android开发入门与实战(上)

    第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3 编程实现 5.1.4 运行项目 5.2 调试项目 5.2.1 设置断点 5.2.2 Debug项目 5.2.3 ...

    《Google Android开发入门与实战》.pdf

    第5章 千里之行 始于足下——第一个应用helloworld 52 5.1 helloworld应用分析 52 5.1.1 新建一个android工程 52 5.1.2 填写工程的信息 52 5.1.3 编程实现 53 5.1.4 运行项目 54 5.2 调试项目 ...

    Python编程入门经典

    第7章 组织程序 101 7.1 模块 102 7.1.1 导入可用模块 102 7.1.2 通过已有模块创建新模块 102 7.1.3 从命令行开始使用模块 104 7.1.4 改变导入方式 106 7.2 包 106 7.3 模块和包 108 7.3.1 将所有内容引入当前 作用...

    android开发入门教程

    14.1.4 豆瓣网API快速入门 14.1.5 豆瓣网APIJava库介绍 14.2 豆瓣网(Web2.0)客户端设计 14.2.1 客户端功能规划设计 14.2.2 UI和交互流程设计 14.2.3 数据存储设计 14.3 豆瓣网(Web2.0)客户端实现 14.3.1 申请APIKey ...

    Google.Android开发入门与实战

    第5章 千里之行始于足下——第一个应用HelloWorld 5.1 HelloWorld应用分析 5.1.1 新建一个Android工程 5.1.2 填写工程的信息 5.1.3 编程实现 5.1.4 运行项目 5.2 调试项目 5.2.1 设置断点 5.2.2 Debug项目 5.2.3 ...

    Google Android开发入门与实战的代码

    第5章 千里之行 始于足下——第一个应用HelloWorld 52 5.1 HelloWorld应用分析 52 5.1.1 新建一个Android工程 52 5.1.2 填写工程的信息 52 5.1.3 编程实现 53 5.1.4 运行项目 54 5.2 调试项目 ...

    Java数据库编程宝典3

    第7章 使用SQL查询检索数据 7.1 SELECT语句 7.1.1 使用WHERE子句 7.1.2 格式化SQL命令 7.2 在较复杂的WHRER子句中使用运算符 7.2.1 DISTINCT运算符 7.2.2 TOP运算符 7.2.3 比较运算符 7.2.4 CHAR和VARCHAR...

    JavaEE开发的颠覆者SpringBoot实战[完整版].part3

    第7 章 Spring Boot 的Web 开发 170 7.1 Spring Boot 的Web 开发支持 170 7.2 Thymeleaf 模板引擎 171 7.2.1 Thymeleaf 基础知识 171 7.2.2 与Spring MVC 集成 174 7.2.3 Spring Boot 的Thymeleaf 支持 175 7.2.4 ...

Global site tag (gtag.js) - Google Analytics