一、bookList.jsp

< td >< a href= " <%= request . getContextPath ()%> /BookDelete?id= ${ bookitem . id } " > 删除 </ a ></ td >

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ page import="com.entity.*" %>
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <base href="<%=basePath%>">
    <title>图书列表</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
	<link rel="stylesheet" type="text/css" href="css/bookList.css">
</head>
    <form action="" method="post">
        <table width="80%" align="center">
            <div class="list">图书列表</div>
                <li><a href="bookAdd.jsp">新增图书</a> </li>
                <li>xxx</li>
                <li>xxx</li>
                <li>xxx</li>
                <td>图书编号</td>
                <td>图书名称</td>
                <td>图书价格</td>
                <td>图书数量</td>
                <td>图书作者</td>
                <td>图书修改</td>
                <td>图书删除</td>
            <c:forEach var="bookitem" items="${booklist}">
                    <td>${bookitem.id}</td>
                    <td>${bookitem.name}</td>
                    <td>${bookitem.price}</td>
                    <td>${bookitem.bookCount}</td>
                    <td>${bookitem.author}</td>
                    <td><a href="<%=request.getContextPath()%>/BookUpdate?id=${bookitem.id}">修改</a></td>
                    <td><a href="<%=request.getContextPath()%>/BookDelete?id=${bookitem.id}">删除</a></td>
            </c:forEach>
        </table>
    </form>
</body>
</html>

二、BookDelete.java

1.根据input标签name属性获取值

2.调用模型---调用查询方法(根据id)

3.request传递值

* Created by Ray on 2018/3/12 0012. public class BookDelete extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //根据input name获取值 int id = Integer.parseInt(request.getParameter("id")); //调用模型 BookModel bookModel = new BookModel(); //调用查询方法(根据id),返回booklist集合 List booklist = bookModel.listId(id); //不同页面间传递,传递一次后,request失去作用 request.setAttribute("booklist",booklist); //request请求,不会改变路径 request.getRequestDispatcher("/bookDelete.jsp").forward(request,response);

三、bookDelete.jsp

<%@ taglib uri =" http://java.sun.com/jsp/jstl/core " prefix =" c " %>

2.跳转servlet---BookDoDelete.java

<%@ page language="java" import="java.util.*" pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
    String path = request.getContextPath();
    String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/";
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <base href="<%=basePath%>">
    <title>删除图书信息</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="cache-control" content="no-cache">
    <meta http-equiv="expires" content="0">
    <meta http-equiv="keywords" content="keyword1,keyword2,keyword3">
    <meta http-equiv="description" content="This is my page">
	<link rel="stylesheet" type="text/css" href="styles.css">
</head>
    <form action="<%=request.getContextPath()%>/BookDoDelete" method="post">
        <table align="center">
            <div align="center" style="font-size: 36px;font-weight: bold;">删除列表</div>
            <c:forEach var="bookitem" items="${booklist}">
                    <td>图书编号:</td>
                    <td><input type="text" name="id" value="${bookitem.id}" readonly="readonly"></td>
                    <td>图书名称:</td>
                    <td><input type="text" name="name" value="${bookitem.name}" readonly="readonly"></td>
                    <td>图书价格:</td>
                    <td><input type="text" name="price" value="${bookitem.price}" readonly="readonly"></td>
                    <td>图书数量:</td>
                    <td><input type="text" name="bookCount" value="${bookitem.bookCount}" readonly="readonly"></td>
                    <td>图书作者:</td>
                    <td><input type="text" name="author" value="${bookitem.author}" readonly="readonly"></td>
            </c:forEach>
                <td><input type="submit" value="删除"></td>
                    <button>
                        <a href="<%=request.getContextPath()%>/BookList" style="text-decoration: none">返回</a>
                    </button>
        </table>
    </form>
</body>
</html>

四、BookDoDelete.java

1.根据input标签name属性获取值

2.调用模型---调用删除方法(根据id)

3.response重定向

* Created by Ray on 2018/3/12 0012. public class BookDoDelete extends HttpServlet { protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { doGet(request,response); protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { //根据input name获取值 int id = Integer.parseInt(request.getParameter("id")); //调用模型 BookModel bookModel = new BookModel(); //调用删除方法(根据id) bookModel.deleteBook(id); //response重定向改变路径 response.sendRedirect(request.getContextPath() + "/BookList");

五、BookModel.java

1.根据Id删除图书信息

* Created by Ray on 2018/3/11 0011. public class BookModel { Dbconn Dbconn = new Dbconn(); Connection conn = null; PreparedStatement ps; ResultSet rs; * @Author: Ray * @Date: 2018/3/11 0011 * @Description: 查询所有图书信息 * @Return: booklist public List<Book> bookList(){ //创建booklist集合 List booklist = new ArrayList(); Book Book = null; //创建Connection连接 conn = Dbconn.getConnection(); //查询所有图书信息的sql语句 String sql = "select * from booktable"; //获取PreparedStatement ps = conn.prepareStatement(sql); //执行查询 rs = ps.executeQuery(); //判断光标向后移动,并判断是否有效 while (rs.next()){ //实例化Book对象 Book = new Book(); //对id属性赋值 Book.setId(rs.getInt("id")); //对name属性赋值 Book.setName(rs.getString("name")); //对price属性赋值 Book.setPrice(rs.getDouble("price")); //对bookCount属性赋值 Book.setBookCount(rs.getInt("bookCount")); //对author属性赋值 Book.setAuthor(rs.getString("author")); //将book对象添加到集合中 booklist.add(Book); //关闭连接 Dbconn.closeConnection(conn,ps,rs); }catch (Exception e){ e.printStackTrace(); //返回booklist集合 return booklist; * @Author: Ray * @Date: 2018/3/11 0011 * @Description: 新增图书信息 * @Return: public void addBook(int id,String name,double price,int bookCount,String author){ //创建Connection连接 conn = Dbconn.getConnection(); //添加图书信息的sql语句 String sql = "insert into booktable(id,name,price,bookCount,author) values(?,?,?,?,?)"; //获取PrepareStatement ps = conn.prepareStatement(sql); //对占位符进行赋值 ps.setInt(1,id); ps.setString(2,name); ps.setDouble(3,price); ps.setInt(4,bookCount); ps.setString(5,author); //执行更新,返回更新锁影响的行数 int row = ps.executeUpdate(); if(row > 0){ System.out.println("添加数据成功"); ps.close(); conn.close(); }catch (Exception e){ System.out.println("添加数据失败"); e.printStackTrace(); * @Author: Ray * @Date: 2018/3/11 0011 * @Description: 根据Id查询图书信息 * @Return: booklist集合 public List<Book> listId(int id){ //创建booklist集合 List booklist = new ArrayList(); Book Book = null; //创建Connection 连接 conn = Dbconn.getConnection(); //根据id查询图书信息的sql语句 String sql = "select * from booktable where id = ?"; //创建PreparedStatement ps = conn.prepareStatement(sql); //对占位符进行赋值 ps.setInt(1,id); //执行查询 rs = ps.executeQuery(); //判断光标向后移动,并判断是否有效 while(rs.next()){ Book = new Book(); Book.setId(rs.getInt("id")); Book.setName(rs.getString("name")); Book.setPrice(rs.getDouble("price")); Book.setBookCount(rs.getInt("bookCount")); Book.setAuthor(rs.getString("author")); booklist.add(Book); }catch (Exception e){ e.printStackTrace(); return booklist; * @Author: Ray * @Date: 2018/3/11 0011 * @Description: 修改图书信息 * @Return: public void updateBook(int id,String name,double price,int bookCount,String author){ //创建Connection连接 conn = Dbconn.getConnection(); //更新图书信息的sql语句 String sql = "update booktable set name=?,price=?,bookCount=?,author=? where id=?"; //获取PreparedStatement ps = conn.prepareStatement(sql); //对占位符进行赋值 ps.setString(1,name); ps.setDouble(2,price); ps.setInt(3,bookCount); ps.setString(4,author); ps.setInt(5,id); //执行更新 int row = ps.executeUpdate(); //判断是否有效 if(row > 0){ System.out.println("修改数据成功"); //关闭连接 ps.close(); conn.close(); }catch (Exception e){ e.printStackTrace(); * @Author: Ray * @Date: 2018/3/12 0012 * @Description: 根据Id删除图书信息 * @Return: public void deleteBook(int id){ //创建Connection连接 conn = Dbconn.getConnection(); //删除图书信息的SQL语句 String sql = "delete from booktable where id = ?"; //获取PreparedStatement ps = conn.prepareStatement(sql); //对占位符进行赋值 ps.setInt(1,id); //执行删除 int row = ps.executeUpdate(); //判断是否有效 if(row > 0){ System.out.println("删除数据成功"); ps.close(); conn.close(); }catch (Exception e){ e.printStackTrace();

六、web.xml

这个很关键,不能出错,否则访问会出现404错误

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>BookList</servlet-name>
        <servlet-class>com.control.BookList</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookList</servlet-name>
        <url-pattern>/BookList</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>BookAdd</servlet-name>
        <servlet-class>com.control.BookAdd</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookAdd</servlet-name>
        <url-pattern>/BookAdd</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>BookUpdate</servlet-name>
        <servlet-class>com.control.BookUpdate</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookUpdate</servlet-name>
        <url-pattern>/BookUpdate</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>BookDoUpdate</servlet-name>
        <servlet-class>com.control.BookDoUpdate</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookDoUpdate</servlet-name>
        <url-pattern>/BookDoUpdate</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>BookDelete</servlet-name>
        <servlet-class>com.control.BookDelete</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookDelete</servlet-name>
        <url-pattern>/BookDelete</url-pattern>
    </servlet-mapping>
    <servlet>
        <servlet-name>BookDoDelete</servlet-name>
        <servlet-class>com.control.BookDoDelete</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>BookDoDelete</servlet-name>
        <url-pattern>/BookDoDelete</url-pattern>
    </servlet-mapping>
</web-app>

七、页面效果

16.3 使用 JDBC 驱动的JavaMail发送电子邮件信息 16.3.1 使用JSP页面和JavaMail发送电子邮件 16.3.2 使用有SendMailBean的JSP页面 16.3.3 部署 16.4 使用JavaMail API接收电子邮件 16.5 小结 第4部分 数据库 JDBC 和XML 第17章 XML文档对象模型和 JDBC 17.1 XML与HTML 17.2 XML和文档对象模型 17.2.1 XML标题 17.2.2 标记和属性 17.2.3 元素和节点 17.3 使用Java XML API——Xerces和JDOM 17.4 将Xbean作为可插入的XML处理模块 17.5 查询 数据库 创建XML文档 17.6 XML 数据 源填充 数据库 17.7 小结 第18章 用RowSet显示 数据 18.1 理解RowSet 18.1.1 创建和应用RowSet 18.1.2 使RowSet可滚动和可更新 18.1.3 更新RowSet 18.1.4 插入新行 18.1.5 删除 行 18.1.6 查看可更新RowSet所做的修改 18.1.7 RowSet事件 18.2 未连接的RowSet 18.2.1 在PDA中使用CachedRowSet 18.2.2 客户端代码 18.3 根据RowSet生成XML 18.4 小结 第19章 用SQL访问XML文档 19.1 用SQL访问XML文档的原因 19.2 创建可访问 JDBC 的XML DBMS 19.2.1 实现基类 19.2.2 实现 JDBC 类 19.2.3 XMLResultSet 19.2.4 实现SQL引擎 19.2.5 测试 JDBC /XML 数据库 19.3 小结 第5部分 EJB、 数据库 和持久性 第20章 EJB 20.1 EJB简述 20.2 会话bean 20.2.1 无状态会话Bean 20.2.2 无状态会话Bean 20.3 实体Bean 20.3.1 主键 20.3.2 持久性存储 20.4 消息驱动bean 20.5 EJB事务 20.5.1 容器管理的事务 20.5.2 bean管理的事务 20.6 小结 第21章 bean管理的持久性 21.1 实体对象持久性 21.2 bean管理的持久性 21.2.1 主键 21.2.2 通过实体bean创建和 删除 实体对象 Z1.2.3 查找实体对象 21.2.4 bean实例变量的同步和持久性对象的状态 Z1.2.5 业务方法 21.3 BMP实体bean示例——MemberEJB 21.4 使用值对象获得更佳性能 21.5 小结 第22章 容器管理的持久性 22.1 CMP实体bean——EJB 2.0之后的新生品 22.2 CMP EJB开发 22.2.1 主接口和远程接口 22.2.2 用最少的代码实现类 22.3 EJB查询语言 22.4 运行示例应用程序 22.5 容器管理的关系 22.5.1 关系字段 22.5.2 关系的基数和方向 22.5.3 访问关系字段 22.6 小结 第23章 Java 数据 对象和透明持久性 23.1 JDO的透明持久性 23.2 什么使JDO成为独特的持久性机制 23.3 主要的JDO API 23.3.1 PersistenceCapable接口 23.3.2 PersistenceManagerFactory接口 23.3.3 PersistenceManager接口 23.3.4 Query接口 23.3.5 Transaction接口 23.4 测试客户示例 23.5 对复杂域对象模型的支持 23.6 JDO应用程序开发过程 23.7 JDO与J2EE框架集成 23.8 小结 第6部分 数据库 管理 第24章 用户管理和 数据库 的安全性 24.1 组、用户和角色 24.1.1 对组进行 操作 24.1.2 对用户进行 操作 24.2 理解 数据库 模式 24.3 管理模式 24.4 用户权限 24.5 用户角色 24.5.1 所有权限 24.5.2 GRANT命令 24.5.3 REVOKE命令 24.6 小结 第25章 性能调整 25.1 数据库 调整 25.1.1 语句调整 25.1.2 调整连接 25.1.3 调整索引 25.2 修改 数据库 方案 25.2.1 范式化 25.2.2 反向范式化 25.2.3 多 数据 表 25.3 产生冗余 数据 25.4 使用导出列和导出表 25.5 数据 划分 25.5.1 水平划分 25.5.2 垂直划分 25.6 使用视图 25.7 持续监控 25.8 小结 附录A SQL语法简明指南 附录B 安装Apache和Tomcat JAVA 数据库 课程设计 第 1 页 共 1 页第 1 页 共 1 页 第 1 页 共 1 页 第 1 页 共 1 页 JAVA 数据库 课程设计全文共77页,当前为第1页。JAVA 数据库 课程设计全文共77页,当前为第1页。JV 数据库 课程设计 JAVA 数据库 课程设计全文共77页,当前为第1页。 JAVA 数据库 课程设计全文共77页,当前为第1页。  一、课程设计目的 通过这次的设计,主要是做出一个小型的管理系统,来加强对JV所学学问的稳固和融会贯穿,可以说是对一个学期所学学问的一个小结,加深对JV 数据库 的理解。 二、需求分析 功能需求分析: 该系统具备管理学生信息、课程信息、选课信息的功能:用户通过输入账号和密码进下该系统后,可以进行一些基础维护〔学生信息维护、课程信息维护、选课信息维护〕。全部都可以进行增加、修改、 删除 、模糊查询。 三、 数据 项: 1表dmin〔用户表〕 Field Type Null Key Comment Usernme chr(10) —— PRI 用户名 pssword chr(10) —— —— 密码 Nme Chr(10) —— JAVA 数据库 课程设计全文共77页,当前为第2页。JAVA 数据库 课程设计全文共77页,当前为第2页。 —— 用户昵称 2表S〔学生信息表〕 Field Type Null Key Comment Sno nvrchr(50) —— PRI 学号 Snme nvrchr(50) —— —— 姓名 Sx nvrchr(50) —— —— 系别 3表C〔课程信息表〕 Field Type Null Key Comment Cno nvrchr(50) —— JAVA 数据库 课程设计全文共77页,当前为第3页。JAVA 数据库 课程设计全文共77页,当前为第3页。 PRI 课号 Cnme nvrchr(50) —— —— 课名 4表SC〔学生信息表〕 Field Type Null Key Comment Cno nvrchr(50) —— PRI 课号 Sno nvrchr(50) —— PRI 学号 C nvrchr(50) —— —— 成果 四、系统功能描述 该小型系统主要是用于管理学生及课程的基本信息,主要功能包括四方面的: 1.管理学生信息,其中包括添加, 删除 ,修改等 操作 。 JAVA 数据库 课程设计全文共77页,当前为第4页。JAVA 数据库 课程设计全文共77页,当前为第4页。 2.管理课程信息,其中包括添加, 删除 ,修改等 操作 。 3.管理选课信息,其中包括添加, 删除 ,修改等 操作 。 4.查询信息,其中包括查询学生信息,查询课程信息,查询选课信息等 操作 。 选课信息 课程信息 学生信息 删除 信息 修改信息 添加信息 删除 信息 修改信息 添加信息 删除 信息 修改信息 添加信息 查询管理 选课管理 课程管理 学生管理 学生信息管理系统 五、代码分析 连接 数据库 方法: 这是jv连接 数据库 的驱动,有关 数据库 操作 都要用到他。 public sttic Connection CONN(){ String driverNme = com.microsoft.sqlserver. jdbc .SQLServerDriver; //加载 JDBC 驱动 String dbURL = jdbc :sqlserver://loclhost:1433; DtbseNme=student; //连接服务器和 数据库 test,此处student是 数据库 名 String userNme = s; JAVA 数据库 课程设计全文共77页,当前为第5页。JAVA 数据库 课程设计全文共77页,当前为第5页。 //默认用户名 String userPwd = mim; //密码 Connection dbConn=null; try { Clss.forNme(driverNme); dbConn = DriverMnger.getConnection(dbURL, userNme, userPwd); System.out.println(Connection Successful!); //假如连接胜利 操纵XX输出Connection Successful! } ctch (Exception e) { e.printStckTrce();} return dbConn;} 用户登录界面user.jv: 登录时,凡是账号密码未填写、输入错误账号密码都会提出错误提示框。在填写好账号密码后,会读取 数据库 里dmin表,并查询其输入是否存在,若无误,则登录到用户界面。 public clss User extends JFrme{ privte JLbel use,pssword; privte JTextField k1;//用户名输入框 pr Jworld@TW技术论坛版主,Java权威技术顾问与专业讲师,Java畅销书作者——林信良全新力作。    国内第一本Java 7,前期版本累计销量5万册。    《Java JDK 7学习笔记》针对Java SE 7新功能全面改版,无论是章节架构或范例程序代码,都做了全面重新编写与翻新。    《Java JDK 7学习笔记》是作者多年来教学实践的经验总结,汇集了学员在教学过程中遇到的概念、 操作 、应用或认证考试上的各种问题及解决方案。    《Java JDK 7学习笔记》详细介绍了JVM、JRE、Java SE API、JDK与IDE之间的对应关系。必须要时从Java SE API的源代码分析,了解各种语法在Java SE API中如何应用。    《Java JDK 7学习笔记》将IDE 操作 纳为教学内容之一,使读者能与实践结合,提供的视频教学能更清楚地帮助读者掌握 操作 步骤。 计算机书籍   《java jdk 7学习笔记》是作者多年来教学实践经验的总结,汇集了教学过程中学生在学习java时遇到的概念、 操作 、应用或认证考试等问题及解决方案。    《java jdk 7学习笔记》针对java se 7新功能全面改版,无论是章节架构或范例程序代码,都做了重新编写与全面翻新。并详细介绍了jvm、jre、java se api、jdk与ide之间的对照关系。必要时从java se api的源代码分析,了解各种语法在java se api中如何应用。对于建议练习的范例提供lab文档,以突出练习重点。此外,本书还将ide 操作 纳为教学内容之一,让读者能与实践相结合,提供的教学视频让读者可以更清楚地掌握 操作 步骤。    《java jdk 7学习笔记》适合java的初中级读者,以及广大java应用开发人员。 林信良(网名:良葛格) 学历:台湾大学电机工程学系 经历:台湾升阳教育训练技术顾问、专业讲师,oracle授权训练中心讲师 著作:《java jdk 5.0学习笔记》、《java se 6技术手册》、《spring技术手册》等 译作:《ajax实战手册》、《jquery实战手册(第2版)》 个人网站:http://openhome.cc 《java jdk 7学习笔记》 chapter1 java平台概论 1 1.1 java不只是语言 2 1.1.1 前世今生 2 1.1.2 三大平台 5 1.1.3 jcp与jsr 6 1.1.4 建议的学习路径 7 1.2 jvm/jre/jdk 11 1.2.1 什么是jvm 11 1.2.2 区分jre与jdk 14 1.2.3 下载、安装jdk 15 1.2.4 认识jdk安装内容 18 1.3 重点复习 19 1.4 课后练习 20 chapter2 从jdk到ide 21 2.1 从hello world开始 22 2.1.1 撰写java原始码 22 2.1.2 path是什么 24 2.1.3 jvm(java)与classpath 27 2.1.4 编译程序(javac)与classpath 30 .2.2 管理原始码与位码文档 31 2.2.1 编译程序(javac)与sourcepath 31 2.2.2 使用package管理类 33 2.2.3 使用import偷懒 36 2.3 使用ide 38 2.3.1 ide项目管理基础 38 2.3.2 使用了哪个jre 43 2.3.3 类文档版本 45 2.4 重点复习 48 2.5 课后练习 49 chapter3 基础语法 53 3.1 类型、变量与运算符 54 3.1.1 类型 54 3.1.2 变量 57 3.1.3 运算符 60 3.1.4 类型转换 66 3.2 流程控制 69 3.2.1 if...else条件式 69 3.2.2 switch条件式 72 3.2.3 for循环 74 3.2.4 while循环 75 3.2.5 break、continue 77 3.3 重点复习 78 3.4 课后练习 79 chapter4 认识对象 83 4.1 类与对象 84 4.1.1 定义类 84 4.1.2 使用标准类 87 4.1.3 对象指定与相等性 90 4.2 基本类型打包器 91 4.2.1 打包基本类型 91 4.2.2 自动装箱、拆箱 92 4.2.3 装箱的内幕 93 4.3 数组对象 96 4.3.1 数组基础 96 4.3.2 操作 数组对象 99 4.3.3 数组复制 105 4.4 字符串对象 108 4.4.1 字符串基础 108 4.4.2 字符串特性 111 4.4.3 字符串编码 115 4.5 查询java api文件 117 4.6 重点复习 119 4.7 课后练习 120 chapter5 对象封装 125 5.1 何谓封装 126 5.1.1 封装对象初始流程 126 5.1.2 封装对象 操作 流程 128 5.1.3 封装对象内部 数据 131 5.2 类语法细节 134 5.2.1 public权限修饰 134 5.2.2 关于构造函数 136 5.2.3 构造函数与方法重载 137 5.2.4 使用this 139 5.2.5 static类成员 142 5.2.6 不定长度自变量 148 5.2.7 内部类 150 5.2.8 传值调用 151 5.3 重点复习 154 5.4 课后练习 155 chapter6 继承与多态 161 6.1 何谓继承 162 6.1.1 继承共同行为 162 6.1.2 多态与is-a 166 6.1.3 重新定义行为 170 6.1.4 抽象方法、抽象类 173 6.2 继承语法细节 174 6.2.1 protected成员 174 6.2.2 重新定义的细节 176 6.2.3 再看构造函数 178 6.2.4 再看final关键字 180 6.2.5 java.lang.object 181 6.2.6 关于垃圾收集 186 6.2.7 再看抽象类 189 6.3 重点复习 191 6.4 课后练习 192 chapter7 接口与多态 199 7.1 何谓接口 200 7.1.1 接口定义行为 200 7.1.2 行为的多态 204 7.1.3 解决需求变化 206 7.2 接口语法细节 213 7.2.1 接口的默认 213 7.2.2 匿名内部类 217 7.2.3 使用enum枚举常数 221 7.3 重点复习 224 7.4 课后练习 224 chapter8 异常处理 231 8.1 语法与继承架构 232 8.1.1 使用try、catch 232 8.1.2 异常继承架构 235 8.1.3 要抓还是要抛 238 8.1.4 认识堆栈追踪 241 8.1.5 关于assert 245 8.2 异常与资源管理 247 8.2.1 使用finally 247 8.2.2 自动尝试关闭资源 249 8.2.3 java.lang.autocloseable接口 251 8.3 重点复习 255 8.4 课后练习 256 chapter8 collection与map 261 9.1 使用collection收集对象 262 9.1.1 认识collection架构 262 9.1.2 具有索引的list 263 9.1.3 内容不重复的set 266 9.1.4 支持队列 操作 的queue 270 9.1.5 访问对象的iterator 273 9.1.6 排序收集的对象 276 9.1.7 使用泛型 280 9.2 键值对应的map 284 9.2.1 常用map 操作 类 284 9.2.2 访问map键值 288 9.3 重点复习 291 9.4 课后练习 292 chapter10 输入输出 299 10.1 inputstream与outputstream 300 10.1.1 串流设计的概念 300 10.1.2 串流继承架构 303 10.1.3 串流处理装饰器 306 10.2 字符处理类 311 10.2.1 reader与writer继承架构 311 10.2.2 字符处理装饰器 313 10.3 重点复习 315 10.4 课后练习 316 10.4.1 选择题 316 10.4.2 操作 题 317 chapter11 线程与并行api 319 11.1 线程 320 11.1.1 线程简介 320 11.1.2 thread与runnable 323 11.1.3 线程生命周期 324 11.1.4 关于threadgroup 331 11.1.5 synchronized与volatile 334 11.1.6 等待与通知 345 11.2 并行api 349 11.2.1 lock、readwritelock与condition 349 11.2.2 使用executor 357 11.2.3 并行collection简介 370 11.3 重点复习 373 11.4 课后练习 375 chapter12 通用api 377 12.1 日志 378 12.1.1 日志api简介 378 12.1.2 指定日志层级 380 12.1.3 使用handler与formatter 382 12.1.4 自定义handler、formatter与 filter 383 12.1.5 使用logging.properties 385 12.2 国际化基础、日期 387 12.2.1 关于i18n 387 12.2.2 使用date与dateformat 390 12.2.3 使用calendar 393 12.3 规则表示式 395 12.3.1 定义规则表示式 396 12.3.2 pattern与matcher 403 12.4 nio2文件系统 405 12.4.1 api架构概述 405 12.4.2 操作 路径 406 12.4.3 属性读取与设定 409 12.4.4 操作 文档与目录 412 12.4.5 读取、访问目录 414 12.4.6 过滤、搜索文档 418 12.5 重点复习 421 12.6 课后练习 422 chapter12 窗口程序设计 425 13.1 swing入门 426 13.1.1 简易需求分析 426 13.1.2 swing组件简介 427 13.1.3 设计主窗口与菜单列 429 13.1.4 关于版面管理 433 13.1.5 事件处理 436 13.2 文档打开、存储与编辑 442 13.2.1 操作 打开文档 442 13.2.2 制作存储、关闭文档 445 13.2.3 文字区编辑、剪切、复制、粘贴 448 13.3 重点复习 449 13.4 课后练习 451 chapter14 整合 数据库 444 14.1 jdbc 入门 454 14.1.1 jdbc 简介 454 14.1.2 连接 数据库 458 14.1.3 使用statement、resultset 464 14.1.4 使用preparedstatement、callablestatement 469 14.2 jdbc 进阶 472 14.2.1 使用datasource取得联机 472 14.2.2 使用resultset卷动、更新 数据 476 14.2.3 批次更新 479 14.2.4 blob与clob 480 14.2.5 交易简介 481 14.2.6 metadata简介 489 14.2.7 rowset简介 492 14.3 重点复习 496 14.4 课后练习 497 chapter15 反射与类加载器 499 15.1 运用反射 500 15.1.1 class与.class文档 500 15.1.2 使用class.forname() 502 15.1.3 从class获得信息 503 15.1.4 从class建立对象 506 15.1.5 操作 对象方法与成员 509 15.1.6 动态代理 512 15.2 了解类加载器 515 15.2.1 类加载器层级架构 515 15.2.2 建立classloader实例 518 15.3 重点复习 520 15.4 课后练习 521 chapter16 自定义泛型、枚举与标注 523 16.1 自定义泛型 524 16.1.1 定义泛型方法 524 16.1.2 使用extends与? 525 16.1.3 使用super与? 530 16.2 自定义枚举 533 16.2.1 了解java.lang.enum类 533 16.3 关于注释 542 16.3.1 常用标准注释 542 16.3.2 自定义注释类型 545 16.3.3 执行时期读取注释信息 549 16.4 重点复习 551 16.5 课后练习 551 appendixa 如何使用本书项目 553 a.1 项目环境配置 554 a.2 打开案例 554 appendixb mysql入门 557 b.1 安装、设定mysql 558 b.2 mysql的 数据 类型 560 b.3 建立 数据库 数据 表 561 b.4 进行crud 操作 562 16.3 使用 JDBC 驱动的JavaMail发送电子邮件信息 16.3.1 使用JSP页面和JavaMail发送电子邮件 16.3.2 使用有SendMailBean的JSP页面 16.3.3 部署 16.4 使用JavaMail API接收电子邮件 16.5 小结 第4部分 数据库 JDBC 和XML 第17章 XML文档对象模型和 JDBC 17.1 XML与HTML 17.2 XML和文档对象模型 17.2.1 XML标题 17.2.2 标记和属性 17.2.3 元素和节点 17.3 使用Java XML API——Xerces和JDOM 17.4 将Xbean作为可插入的XML处理模块 17.5 查询 数据库 创建XML文档 17.6 XML 数据 源填充 数据库 17.7 小结 第18章 用RowSet显示 数据 18.1 理解RowSet 18.1.1 创建和应用RowSet 18.1.2 使RowSet可滚动和可更新 18.1.3 更新RowSet 18.1.4 插入新行 18.1.5 删除 行 18.1.6 查看可更新RowSet所做的修改 18.1.7 RowSet事件 18.2 未连接的RowSet 18.2.1 在PDA中使用CachedRowSet 18.2.2 客户端代码 18.3 根据RowSet生成XML 18.4 小结 第19章 用SQL访问XML文档 19.1 用SQL访问XML文档的原因 19.2 创建可访问 JDBC 的XML DBMS 19.2.1 实现基类 19.2.2 实现 JDBC 类 19.2.3 XMLResultSet 19.2.4 实现SQL引擎 19.2.5 测试 JDBC /XML 数据库 19.3 小结 第5部分 EJB、 数据库 和持久性 第20章 EJB 20.1 EJB简述 20.2 会话bean 20.2.1 无状态会话Bean 20.2.2 无状态会话Bean 20.3 实体Bean 20.3.1 主键 20.3.2 持久性存储 20.4 消息驱动bean 20.5 EJB事务 20.5.1 容器管理的事务 20.5.2 bean管理的事务 20.6 小结 第21章 bean管理的持久性 21.1 实体对象持久性 21.2 bean管理的持久性 21.2.1 主键 21.2.2 通过实体bean创建和 删除 实体对象 Z1.2.3 查找实体对象 21.2.4 bean实例变量的同步和持久性对象的状态 Z1.2.5 业务方法 21.3 BMP实体bean示例——MemberEJB 21.4 使用值对象获得更佳性能 21.5 小结 第22章 容器管理的持久性 22.1 CMP实体bean——EJB 2.0之后的新生品 22.2 CMP EJB开发 22.2.1 主接口和远程接口 22.2.2 用最少的代码实现类 22.3 EJB查询语言 22.4 运行示例应用程序 22.5 容器管理的关系 22.5.1 关系字段 22.5.2 关系的基数和方向 22.5.3 访问关系字段 22.6 小结 第23章 Java 数据 对象和透明持久性 23.1 JDO的透明持久性 23.2 什么使JDO成为独特的持久性机制 23.3 主要的JDO API 23.3.1 PersistenceCapable接口 23.3.2 PersistenceManagerFactory接口 23.3.3 PersistenceManager接口 23.3.4 Query接口 23.3.5 Transaction接口 23.4 测试客户示例 23.5 对复杂域对象模型的支持 23.6 JDO应用程序开发过程 23.7 JDO与J2EE框架集成 23.8 小结 第6部分 数据库 管理 第24章 用户管理和 数据库 的安全性 24.1 组、用户和角色 24.1.1 对组进行 操作 24.1.2 对用户进行 操作 24.2 理解 数据库 模式 24.3 管理模式 24.4 用户权限 24.5 用户角色 24.5.1 所有权限 24.5.2 GRANT命令 24.5.3 REVOKE命令 24.6 小结 第25章 性能调整 25.1 数据库 调整 25.1.1 语句调整 25.1.2 调整连接 25.1.3 调整索引 25.2 修改 数据库 方案 25.2.1 范式化 25.2.2 反向范式化 25.2.3 多 数据 表 25.3 产生冗余 数据 25.4 使用导出列和导出表 25.5 数据 划分 25.5.1 水平划分 25.5.2 垂直划分 25.6 使用视图 25.7 持续监控 25.8 小结 附录A SQL语法简明指南 附录B 安装Apache和Tomcat 这次同样运用之前写过的部分代码进行改变,实现一个 删除 功能,这个功能很好添加,表单中只要form一个参数到DeleteServlet中,所以重点的代码还是在DeleteServlet中实现业务逻辑。 我们运用到的SQL语句是.  String sql = "delete from tb_book where id=?"; 所以需要表单form的时候要传进一个id值。然后我们根据id public class JDBC Test2 { public static void main(String[] args) { Connection conn = null; 操作 数据库 :mysql 操作 目的:通过 JDBC 数据库 删除 某表的 数据 记录。在 删除 数据 记录之前,我们来看下当前的 数据库 情况,有一条ID为5,name为codignwhy的 数据 记录。如下图所示: JDBC 删除 数据 记录的核心代码如下:String jdbc URL=" jdbc :mysql://localhost:3306/codingwhy?useUnicode=true&character... import com.mysql.cj.protocol.Resultset; import com.mysql.cj.x.protobuf.MysqlxCrud.Collection; public class jdbc 2 { public static void main(String[] args) throws Exception { // TODO 自动生成的方法存根 String url = " jdbc :mysq import java.sql.Statement; public class JDBC Test01{ public static void main(String[] args){ Statement stmt = null; Connection conn