`
huangsen1101
  • 浏览: 21975 次
  • 性别: Icon_minigender_1
  • 来自: 福州
文章分类
社区版块
存档分类
最新评论

jdbc的增删改查

阅读更多
传智播客——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增删改查学生信息

    【Servlet +jsp+jdbc增删改查学生信息】是一个经典的Web开发示例,它结合了Java服务器页面(JSP)、Servlet和Java数据库连接(JDBC)技术,用于创建一个简单的学生信息管理系统。这个项目适用于初学者,可以帮助他们...

    struts+jdbc增删改查

    总的来说,"struts+jdbc增删改查"这个小案例涵盖了Web开发中基础的数据操作,是学习Java Web开发的典型应用场景。通过这个案例,开发者可以深入理解Struts 2的架构以及如何使用JDBC进行数据库操作,为进一步学习更...

    Struts2 JDBC 增删改查

    在这个"Struts2 JDBC 增删改查"项目中,我们将探讨如何结合这两者来构建一个简单的数据管理应用。 首先,让我们深入理解Struts2的核心概念。Struts2框架提供了动作(Action)和结果(Result)的概念,动作负责处理...

    简单的jdbc增删改查

    对于增删改查操作,使用`Statement`或`PreparedStatement`。例如,插入数据: ```java String sql = "INSERT INTO users (name, email) VALUES (?, ?)"; PreparedStatement pstmt = conn.prepareStatement(sql); ...

    Spring JDBC 增删改查

    Spring JDBC是Spring框架的一部分,它提供了一种抽象层,使得我们能够更方便地使用Java数据库连接(JDBC)来处理数据库操作,如增删改查(CRUD)。在这个主题下,我们将深入探讨Spring JDBC的核心概念、配置、以及...

    通用的jdbc增删改查

    通用的jdbc增删改查,仅仅只是两个通用的方法,利用反射和泛型

    struts2+jdbc增删改查

    总的来说,`struts2+jdbc增删改查`的项目是一个适合初学者实践的实例,涵盖了Web开发中基础的数据库操作和业务流程处理。通过这个项目,开发者可以学习到如何在Struts2框架下利用JDBC与数据库交互,同时掌握JSP页面...

    JSP+JDBC增删改查

    在"JSP+JDBC增删改查"的项目中,我们首先需要创建一个web项目,这通常包含Web-INF目录、WEB-INF下的web.xml配置文件、以及存放JSP页面的目录。在JSP页面中,我们可以使用EL(Expression Language)和JSTL(Java...

    JDBC增删改查简单例子

    本文将详细讲解如何使用JDBC进行用户数据的增删改查操作。 首先,我们需要理解JDBC的基本流程,它包括加载驱动、建立连接、创建Statement对象、执行SQL语句以及关闭资源。以下是一个简单的示例: 1. **加载驱动**...

    jdbc增删改查

    【标题】:“jdbc增删改查” 在Java编程领域,JDBC(Java Database Connectivity)是连接Java应用程序与数据库的关键技术。它提供了一组接口和类,使得开发者能够以标准化的方式与各种关系型数据库进行交互,执行...

    经典jdbc增删改查

    【JDBC基础与应用】 JDBC(Java Database Connectivity)是...通过上述步骤,我们可以使用JDBC进行数据库的增删改查操作,同时理解MVC模式中的数据访问层是如何工作的。这在实际的软件开发中是非常基础且重要的技能。

    jdbc增删改查加分页

    本篇主要围绕"jdbc增删改查加分页"这一主题展开,结合给出的标签"源码"和"工具",将深入讲解JDBC在数据库CRUD(Create、Read、Update、Delete)操作以及分页查询中的应用。 首先,我们需要了解JDBC的基本使用流程:...

    java十分经典的jdbc增删改查程序,含sql语句

    在这个经典的JDBC增删改查程序中,我们可以深入理解JDBC的基本操作流程和核心概念。 1. **连接数据库**: 首先,我们需要通过`Class.forName()`加载数据库驱动,然后使用`DriverManager.getConnection()`方法建立...

    jdbc完全封装实现增删改查

    实现完全的对jdbc对象的封装,只需调用则可对数据库进行CRUD操作

    一个封装好的java JDBC增删改查类

    一个封装好的java JDBC增删改查类

    JDBC增删改查小例子

    这个JDBC增删改查的小例子,虽然简单,但涵盖了JDBC基本操作的关键步骤,对于初学者来说是非常有价值的实践项目。通过这个示例,你可以更好地理解和掌握如何在实际应用中使用JDBC进行数据库操作。

    JSP+JDBC增删改查操作

    在Web项目开发中,"JSP+JDBC增删改查操作"是一个常见的技术组合,用于构建动态数据驱动的网页应用。JSP(JavaServer Pages)是Java平台上的服务器端脚本语言,它允许开发者在HTML页面中嵌入Java代码,以实现动态内容...

    jdbc.rar_JDBC增删改查_java jdbc_jdbc_jdbc 增删改查_jdbc封装

    在这个“jdbc.rar”压缩包中,我们很显然会看到关于使用Java JDBC进行数据操作的示例代码,特别是增删改查(CRUD)功能的实现以及可能的封装。 首先,让我们理解JDBC的基本工作流程: 1. **加载驱动**:在使用JDBC...

    jdbc.rar_JDBC增删改查_inq6z_java_jdbc

    **三、JDBC增删改查操作** 1. **增加(Insert)**:使用PreparedStatement的setXXX()方法设置参数,然后调用executeUpdate()插入数据。 2. **删除(Delete)**:根据条件构造SQL删除语句,执行executeUpdate()。 ...

    jabc.rar_JDBC增删改查_java jdbc

    总结来说,"jabc.rar_JDBC增删改查_java jdbc"的示例旨在教育开发者如何使用Java的JDBC API与数据库进行交互,涵盖基本的数据库操作,这对于任何Java开发者理解和构建数据驱动的应用都是至关重要的技能。通过实践...

Global site tag (gtag.js) - Google Analytics