传智播客——jdbc的增删改查 收藏
今天我们做了一个例子就是利用jdbc的知识对数据库进行增删改查,今天我把佟老师讲的思路在计算机上打了一遍,这个例题是对标签,数据库,和类加载的一个小复习!代码和步骤如下!
(1)增加数据操作
要在servlet中实现以下几点
获取客户端浏览器的请求参数
封装请求信息到一个 JavaBean中
调用 CustomerDAO 方法
根据方法的执行情况确定派发页面
若不出现异常
出现异常
派发页面
第一部页面显示代码,
<%@ page language="java" pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>My JSP 'searchCustomer.jsp' starting page</title>
</head>
<body>
<c:if test="${requestScope.errorInfo != null}">
<font color="red">${requestScope.errorInfo}</font>
<br><br>
</c:if>
<form action="addnewcustomer" method="post">
<table>
<tr>
<td>^^Name:</td>
<td><input type="text" name="name" /></td>
</tr>
<tr>
<td>Address:</td>
<td><input type="text" name="address" /></td>
</tr>
<tr>
<td>Phone:</td>
<td><input type="text" name="phone" /></td>
</tr>
<tr>
<td colspan="2"><input type="submit" value="Add"/></td>
</tr>
</table>
</form>
</body>
</html>
第二部:进入select容器中
public class AddNewCustomer extends HttpServlet implements Servlet {
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 解析客户端的请求参数
String name = request.getParameter("name");
String address = request.getParameter("address");
String phone = request.getParameter("phone");
//2. 把获取到的参数封装成一个 Customer 对象
Customer cust = new Customer(name, address, phone);
//3. 调用 CustomerDAO.saveCustomer(Customer customer) 方法
CustomerDAO customerDAO = new CustomerDAO();
//4. 决定要派发的页面: 若方法没有异常出现, 派发页面为 success.jsp; 若有异常, 派发页面为 addcustomer.jsp,
// 并给出错误提示信息
String forwardPage = null;
try {
customerDAO.saveCustomer(cust);
forwardPage = "success.jsp";
} catch (Exception e) {
e.printStackTrace();
request.setAttribute("errorInfo", e.getMessage());
forwardPage = "addcustomer.jsp";
}
//5. 页面的派发
RequestDispatcher dispatcher = null;
dispatcher = request.getRequestDispatcher(forwardPage);
dispatcher.forward(request, response);
}
}
第三步调用 CustomerDAO.saveCustomer(Customer customer) 方法
把 customer 对象保存到数据库中
* @param customer
*/
public void saveCustomer(Customer customer){
Connection conn = null;
PreparedStatement ps = null;
try {
//1. 获取数据库连接
conn = DBManager.getConnection();
//2. 准备预编译的 sql 语句
String sql = "INSERT INTO customers(name, address, phone) VALUES(?, ?, ?)";
//3. 获取 PreparedStatement 对象
ps = conn.prepareStatement(sql);
//4. 填充 编译的 sql 语句中的参数
ps.setString(1, customer.getName());
ps.setString(2, customer.getAddress());
ps.setString(3, customer.getPhone());
//5. 发送 sql 语句
ps.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
String errorMsg = "Duplicate entry '" + customer.getName() + "' for key 2";
String errorMsg_ = "您选择的用户名 " + customer.getName() + " 已被占用, 请重新输入新的用户名";
if(errorMsg.equals(e.getMessage()))
throw new RuntimeException(errorMsg_, e);
throw new RuntimeException(e);
} finally{
//6. 释放数据库资源
DBManager.releaseDBSource(null, ps, conn);
}
}
}
第四部按以上步骤可以实现对数据的增加
还需要一个加载类
/**
* 数据库操作的工具类
* @author Administrator
*
*/
public final class DBManager {
/**
* 私有化构造器, 不允许创建工具类的对象
*/
private DBManager(){}
/**
* 连接数据库的基本信息
*/
private static String user;
private static String password;
private static String url;
private static String driver;
/**
* 对 user 等四个静态变量进行初始化
* 1. 创建一个 Properties 对象
* 2. 使用类加载器加载 mysql.properties 文件对应的输入流
* 3. 获取 mysql.properties 文件中的四个属性值
* 4. 对 user 等四个静态变量进行初始化
*/
static{
try {
Properties props = new Properties();
InputStream propsIs = DBManager.class.getClassLoader().getResourceAsStream("mysql.properties");
props.load(propsIs);
user = props.getProperty("user");
password = props.getProperty("password");
url = props.getProperty("url");
driver = props.getProperty("driver");
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取数据库连接
*/
public static Connection getConnection(){
Connection conn = null;
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
throw new RuntimeException("连接数据库服务器失败, 请检查数据库服务器的状态", e);
}
return conn;
}
/**
* 关闭数据库资源
*/
public static void releaseDBSource(ResultSet rs, Statement st, Connection conn){
try {
if (rs != null)
rs.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (st != null)
st.close();
} catch (SQLException e) {
e.printStackTrace();
} finally {
try {
if (conn != null)
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}
以下介绍删除操作在控制区中的代码依旧是servlet中的代码与步骤
删除:public class CustomerUIServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取需要修改的 customer 的 id
String idStr = request.getParameter("id");
//2. 调用 CustomerDAO.findCustomerById(int customerId) 获取对应的 Customer 对象;
CustomerDAO customerDAO = new CustomerDAO();
//3.1 若不出现异常, 且用户该存在, 则把 Customer 对象放置到 request 域中,
// 确定派发页面为: customerUI.jsp, 利用 EL 和 JSTL 在该页面显示该 Customer 的详细信息
String forwardPage = null;
try {
Customer cust = customerDAO.findCustomerById(Integer.parseInt(idStr));
request.setAttribute("customer", cust);
forwardPage = "customerUI.jsp";
}
//3.2 若出现异常, 则派发到 searchCustomers.jsp 页面, 要求该页面还继续显示之前的 Customer 信息,
// 给出对应的异常信息提示
catch (NumberFormatException e) {
e.printStackTrace();
request.setAttribute("errorInfo", "您输入的 id 格式不正确");
forwardPage = "searchcustomers";
} catch(Exception ex){
request.setAttribute("errorInfo", ex.getMessage());
forwardPage = "searchcustomers";
}
//4. 派发页面
RequestDispatcher dispatcher = null;
dispatcher = request.getRequestDispatcher(forwardPage);
dispatcher.forward(request, response);
}
}
查找:protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//1. 获取客户端浏览器的请求参数
String name = null;
String address = null;
String phone = null;
name = request.getParameter("name");
address = request.getParameter("address");
phone = request.getParameter("phone");
//2. 封装请求信息到一个 Customer 对象中
Customer cust = new Customer(name, address, phone);
//3. 调用 CustomerDAO 的 searchCustomers(Customer) 方法
CustomerDAO customerDAO = new CustomerDAO();
//4. 根据方法的执行情况确定派发页面
String forwardPage = null;
try {
List custs = customerDAO.searchCustomers(cust);
//4.1 若不出现异常, 派发页面为 searchCustomers.jsp, 需要在该页面显示 customer 信息
request.setAttribute("customers", custs);
forwardPage = "searchCustomers.jsp";
} catch (Exception e) {
e.printStackTrace();
//4.2 出现异常, 派发页面为 searchCustomers.jsp, 给出错误提示
request.setAttribute("errorInfo", e.getMessage());
forwardPage = "searchCustomers.jsp";
}
//5. 派发页面
RequestDispatcher dispatcher = null;
dispatcher = request.getRequestDispatcher(forwardPage);
dispatcher.forward(request, response);
}
}
更新:String forwardPage = null;
try {
//2. 把请求参数封装成一个 Customer 对象
Customer cust = new Customer(name, address, phone);
cust.setId(Integer.parseInt(idStr));
request.setAttribute("customer", cust);
//3. 调用 CustomerDAO.updateCustomer(Cucstomer cust) 方法
CustomerDAO customerDAO = new CustomerDAO();
int result = customerDAO.updateCustomer(cust);
//4. 根据方法的执行情况确定派发页面
if(result == 1){
//4.1 若方法返回值为 1, 则派发页面为: searchCustomers.jsp, 使该页面显示修改成功之后的 customer 列表信息
forwardPage = "searchcustomers";
}else{
//4.2 若方法返回值为 0, 说明修改的用户信息不存在, 派发页面为: customerUI.jsp, 现实异常信息, 而且还要对已经填写好的信息进行回显
request.setAttribute("errorInfo", "要修改的用户不存在");
}
} catch (NumberFormatException e) {
e.printStackTrace();
//4.3 若出现异常, 者派发页面为: customerUI.jsp, 现实异常信息, 而且还要对已经填写好的信息进行回显
request.setAttribute("errorInfo", "您输入的 id 格式不正确");
forwardPage = "customerUI.jsp";
} catch(Exception ex){
request.setAttribute("errorInfo", ex.getMessage());
forwardPage = "customerUI.jsp";
}
分享到:
相关推荐
【Servlet +jsp+jdbc增删改查学生信息】是一个经典的Web开发示例,它结合了Java服务器页面(JSP)、Servlet和Java数据库连接(JDBC)技术,用于创建一个简单的学生信息管理系统。这个项目适用于初学者,可以帮助他们...
总的来说,"struts+jdbc增删改查"这个小案例涵盖了Web开发中基础的数据操作,是学习Java Web开发的典型应用场景。通过这个案例,开发者可以深入理解Struts 2的架构以及如何使用JDBC进行数据库操作,为进一步学习更...
在这个"Struts2 JDBC 增删改查"项目中,我们将探讨如何结合这两者来构建一个简单的数据管理应用。 首先,让我们深入理解Struts2的核心概念。Struts2框架提供了动作(Action)和结果(Result)的概念,动作负责处理...
对于增删改查操作,使用`Statement`或`PreparedStatement`。例如,插入数据: ```java String sql = "INSERT INTO users (name, email) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); ...
Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得我们能够更方便地使用Java数据库连接(JDBC)来处理数据库操作,如增删改查(CRUD)。在这个主题下,我们将深入探讨Spring JDBC的核心概念、配置、以及...
通用的jdbc增删改查,仅仅只是两个通用的方法,利用反射和泛型
总的来说,`struts2+jdbc增删改查`的项目是一个适合初学者实践的实例,涵盖了Web开发中基础的数据库操作和业务流程处理。通过这个项目,开发者可以学习到如何在Struts2框架下利用JDBC与数据库交互,同时掌握JSP页面...
在"JSP+JDBC增删改查"的项目中,我们首先需要创建一个web项目,这通常包含Web-INF目录、WEB-INF下的web.xml配置文件、以及存放JSP页面的目录。在JSP页面中,我们可以使用EL(Expression Language)和JSTL(Java...
本文将详细讲解如何使用JDBC进行用户数据的增删改查操作。 首先,我们需要理解JDBC的基本流程,它包括加载驱动、建立连接、创建Statement对象、执行SQL语句以及关闭资源。以下是一个简单的示例: 1. **加载驱动**...
【标题】:“jdbc增删改查” 在Java编程领域,JDBC(Java Database Connectivity)是连接Java应用程序与数据库的关键技术。它提供了一组接口和类,使得开发者能够以标准化的方式与各种关系型数据库进行交互,执行...
【JDBC基础与应用】 JDBC(Java Database Connectivity)是...通过上述步骤,我们可以使用JDBC进行数据库的增删改查操作,同时理解MVC模式中的数据访问层是如何工作的。这在实际的软件开发中是非常基础且重要的技能。
本篇主要围绕"jdbc增删改查加分页"这一主题展开,结合给出的标签"源码"和"工具",将深入讲解JDBC在数据库CRUD(Create、Read、Update、Delete)操作以及分页查询中的应用。 首先,我们需要了解JDBC的基本使用流程:...
在这个经典的JDBC增删改查程序中,我们可以深入理解JDBC的基本操作流程和核心概念。 1. **连接数据库**: 首先,我们需要通过`Class.forName()`加载数据库驱动,然后使用`DriverManager.getConnection()`方法建立...
实现完全的对jdbc对象的封装,只需调用则可对数据库进行CRUD操作
一个封装好的java JDBC增删改查类
这个JDBC增删改查的小例子,虽然简单,但涵盖了JDBC基本操作的关键步骤,对于初学者来说是非常有价值的实践项目。通过这个示例,你可以更好地理解和掌握如何在实际应用中使用JDBC进行数据库操作。
在Web项目开发中,"JSP+JDBC增删改查操作"是一个常见的技术组合,用于构建动态数据驱动的网页应用。JSP(JavaServer Pages)是Java平台上的服务器端脚本语言,它允许开发者在HTML页面中嵌入Java代码,以实现动态内容...
在这个“jdbc.rar”压缩包中,我们很显然会看到关于使用Java JDBC进行数据操作的示例代码,特别是增删改查(CRUD)功能的实现以及可能的封装。 首先,让我们理解JDBC的基本工作流程: 1. **加载驱动**:在使用JDBC...
**三、JDBC增删改查操作** 1. **增加(Insert)**:使用PreparedStatement的setXXX()方法设置参数,然后调用executeUpdate()插入数据。 2. **删除(Delete)**:根据条件构造SQL删除语句,执行executeUpdate()。 ...
总结来说,"jabc.rar_JDBC增删改查_java jdbc"的示例旨在教育开发者如何使用Java的JDBC API与数据库进行交互,涵盖基本的数据库操作,这对于任何Java开发者理解和构建数据驱动的应用都是至关重要的技能。通过实践...