基于JDBC的通讯录练手:
项目以MVC模式开发,包名:
cn.itcast.txl.domain;
cn.itcast.txl.dao;
cn.itcast.txl.dao.impl;
cn.itcast.txl.service;
cn.itcast.txl.service.impl;
cn.itcast.txl.controller;

domain层
User.java
public void User(){
    private int id;
    private String name;
    private String sex;
    private String phone;
    private String QQ;
    private String Email;
    private String address;
    //提供有参函数,无参函数
    //提供set和get方法
}

dao层
UserDao.java
public interface UserDao {

public void save(User user);
    
    public void delete(int id);
    
    public void update(User user);
    
    public Object query();
    //根据id获取联系人
    public User get(int id);
}
UserDaoImpl.java
//添加联系人
    public void save(User user) {
        //定义变量
        Connection conn = null;
        PreparedStatement state = null;
        try {
            //初始化参数
            conn = DBUtils.getConnection();
            String sql = "insert into t_user (name,sex,phone,QQ,Email,address) values (?,?,?,?,?,?)";
            //设置参数
            state = conn.prepareStatement(sql);
            state.setString(1, user.getName());
            state.setString(2, user.getSex());
            state.setString(3, user.getPhone());
            state.setString(4, user.getQQ());
            state.setString(5, user.getEmail());
            state.setString(6, user.getAddress());
            
            //执行
            state.execute();
            System.out.println("添加联系人成功.......................");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException("添加联系人失败....................");
        }finally{
            //释放资源
            DBUtils.closeAll(null, state, conn);
        }
        
    }

public void update(User user) {
        //定义变量
        Connection conn = null;
        PreparedStatement state = null;
        try {
            //初始化参数
            conn = DBUtils.getConnection();
            String sql = "update t_user set name=?,sex=?,phone=?,QQ=?,Email=?,address=? where id=?";
            //设置参数
            state = conn.prepareStatement(sql);
            state.setString(1, user.getName());
            state.setString(2, user.getSex());
            state.setString(3, user.getPhone());
            state.setString(4, user.getQQ());
            state.setString(5, user.getEmail());
            state.setString(6, user.getAddress());
            state.setInt(7, user.getId());
            
            System.out.println("id="+user.getId());
            
            //执行
            state.execute();
            System.out.println("修改联系人成功.......................");
        } catch (Exception e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException("修改联系人失败....................");
        }finally{
            //释放资源
            DBUtils.closeAll(null, state, conn);
        }
    }

public Object query() {
        //定义变量
        String sql = null;
        Connection conn = null;
        PreparedStatement state = null;
        ResultSet set = null;
        User user = null;
        Map<String, User> users = new LinkedHashMap<String, User>();
        
        //初始化
        try {
            conn = DBUtils.getConnection();
            sql = "select id,name,sex,phone,QQ,Email,address from t_user";
            state = conn.prepareStatement(sql);
            
            //执行
            set = state.executeQuery();
            
            //获取
            while(set.next()){
                int id = set.getInt(1);
                String name = set.getString(2);
                String sex = set.getString(3);
                String phone = set.getString(4);
                String QQ = set.getString(5);
                String Email = set.getString(6);
                String address = set.getString(7);
                
                
                //封装为user对象
                user = new User(id,name, sex, phone, QQ, Email, address);
                //存储到Map集合中
                users.put(name, user);
                
            }
            //成功
            System.out.println("获取所有联系人成功.........");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException("获取所有联系人失败.........");
        }finally{
            DBUtils.closeAll(set, state, conn);
        }    
        return users;
    }

public void delete(int id) {
        String sql = null;
        Connection conn = null;
        PreparedStatement state = null;
        
        try {
            conn = DBUtils.getConnection();
            sql = "delete from t_user where id = ?";
            
            //设置参数
            state=conn.prepareStatement(sql);
            state.setInt(1, id);
            
            //执行
            state.execute();
        } catch (Exception e) {
            e.printStackTrace();
            throw new RuntimeException("删除失败了........"+e);
        }finally{
            DBUtils.closeAll(null, state, conn);
        }
        
    }

public User get(int id) {
        String sql = null;
        Connection conn = null;
        PreparedStatement state = null;
        ResultSet set = null;
        User user =null;
        //初始化
        try {
            conn = DBUtils.getConnection();
            sql = "select name,sex,phone,QQ,Email,address from t_user where id = ?";
            state = conn.prepareStatement(sql);
            state.setInt(1, id);
            
            //执行
            set = state.executeQuery();
            
            //获取
            while(set.next()){
                String name = set.getString(1);
                String sex = set.getString(2);
                String phone = set.getString(3);
                String QQ = set.getString(4);
                String Email = set.getString(5);
                String address = set.getString(6);
                
                //封装为user对象
                user = new User(name, sex, phone, QQ, Email, address);
                break;
                
            }
            user.setId(id);
            //成功
            
            System.out.println("获取单个人成功.........");
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
            throw new RuntimeException("获取单个联系人失败.........",e);
        }finally{
            DBUtils.closeAll(set, state, conn);
        }    
            return user;
    }
}
DBUtils.java
/*
 * 该工具类主要任务是:
 * 1、加载配置文件
 * 2、返回数据库的连接
 * 3、释放数据库连接的所有资源
 */
public class DBUtils {

//使用连接池对象
    private static ComboPooledDataSource ds = new ComboPooledDataSource();
    //提供获取Connection连接方法
    public static Connection getConnection(){
        Connection conn = null;
        try {
            conn = ds.getConnection();
            System.out.println("测试:连接池中的连接对象......");
        } catch (SQLException e) {
            e.printStackTrace();
            throw new RuntimeException("连接失败....");
        }
        return conn;
    }
    
    //提供一个释放所有资源的方法
    public static void closeAll(ResultSet set,Statement state,Connection conn){
        try {
            if( set != null )
                 set.close();
        } catch (Exception e) {
            set = null;
        }
        try {
            if( state != null )
                state.close();
        } catch (Exception e) {
            state = null;
        }
        try {
            if( conn != null )
                conn.close();
        } catch (Exception e) {
            conn = null;
        }
    }
}

UserService.java
public interface UserService(){
     public void save(User user);
     public void delete(int id);
     public void update(User user);
     public Map<String,User> list();
     public User get(int id);
}

UserServiceImpl.java
public class UserServiceImpl implement UserService{
     private UserDao userDao = new UserDaoImpl();
     .......
}

UserServlet.java
public class UserServlet extends HttpServlet{
    //定义服务对象
    private UserService service = new UserServiceImpl();
    doget(){
       this.dopost(request,response);
    };
    dopost(){
    request.setCharactorEncoding("UTF-8");
    String method = request.getParameter("method");
    if(method.equals("list")){
            list(request,response);
    }else if(method.equals("save")){
        save(request,response);
    }else if(method.equals("saveAdd")){
        saveAdd(request,response);
    }else if(method.equals("updateUser")){
        updateUser(request, response);
    }else if(method.equals("get")){
        get(request, response);
    }else if(method.equals("delete")){
        delete(request, response);
    }

};
    //处理用户提交查询的请求
    public void list(HttpServletRequest request,HttpServletResponse response){
    LinkedHashMap<String, User> user = (LinkedHashMap<String, User>)service.list();
    request.setAttribute("users",user);
    String path = "/WEB-INF/list.jsp";
    request.getRequestDispatcher(path).forward(request,response);
    }
    //接收用户的添加请求,转发到增加页面
    public void save(HttpServletRequest request,HttpServletResponse response){
    String path = "/WEB-INF/addUser.jsp";
    request.getRequestDispatcher(path).forward(request,response);
    }
    public void saveAdd(HttpServletRequest request,HttpServletResponse response){
        User user = new User();
    user.setName(request.getParameter("name"));
    user,setSex(request.getParameter("sex"));
    user.setPhone(request.getParameter("phone"));
    user.setQQ(request.getParameter("QQ"));
    user.setEmail(request.getParameter("Email"));
    user.setAddress(request.getParameter("address"));
        service.save(user);
    String path = "/UserServlet?method=list";
    request.getRequestDispathcher(path).forward(request,response);
    }
    public void delete(HttpServletRequest request,HttpServletResponse response){
    int id = Integer.parseInt(request.getParameter("id"));
    sevice.delete(id);
    String path = "/UserServlet?method=list";
    request.getRequestDispatcher(path).forward(request,response);
    }
    //获取跳转到修改页面的请求带ID
    public void get(HttpServletRequest request,HttpServletResponse response){
    String path = "/WEB-INF/updateUser.jsp";
    User user = service.get(Integer.parseInt(request.getParameter("id")));
    request.setAttribute("user",user);
    request.getRequsetDispatcher(path).forward(request,response);
    }
    public void update(HttpServletRequest request,HttpServletResponse response){
        User user = new User();
    user.setId(Integer.parseInt(request,getParameter("id")));
    user.setName(request.getParameter("name"));
    user.setSex(request.getParameter("sex"));
    user.setPhone(request.getParameter("phone"));
    user.setQQ(request.getParameter("QQ"));
    user.setEmail(request.getParameter("Email"));
    user.setAddress(request.getParameter("address"));
    service.update(user);
    String path = "/Userservlet?method=list";
    request.getRequestDispatcher(path).forward(request,response);
    }
}

jsp页面
list.jsp
<html>
  <head>
    <title>所有联系人</title>
  </head>
 
  <body>
    <center>

<h1 style="">通讯录</h1>

<table border="1" style="border-collapse: collapse; border-color: blue;">
            <!-- 表头 -->
            <tr>
                <th>姓名</th>
                <th>性别</th>
                <th>电话</th>
                <th>QQ</th>
                <th>Email</th>
                <th>地址</th>
                <th>操作</th>
            </tr>

<!-- 显示数据列表 -->
            <c:forEach items="${requestScope.users}" var="user">
            <tr>
                <td>${user.value.name}</td>
                <td>${user.value.sex}</td>
                <td>${user.value.phone}</td>
                <td>${user.value.QQ}</td>
                <td>${user.value.email}</td>
                <td>${user.value.address}</td>
                <td>
                    <a href="${pageContext.request.contextPath}/UserServlet?method=delete&id=${user.value.id}" onclick="return confirm('确定要删除本联系人吗?')">删除</a>
                    <a href="${pageContext.request.contextPath}/UserServlet?method=get&id=${user.value.id}">修改</a>
                </td>
            </tr>
            </c:forEach>

<!-- 其他操作 -->
            <tr>
                <td colspan="7">
                    <a href="${pageContext.request.contextPath}/UserServlet?method=save">添加</a>
                </td>
            </tr>
        </table>

</center>
  </body>
</html>

addUser.jsp
<html>
<head>
<head>
    <title>添加联系人</title>
    <style type="text/css">
        th, td{
            padding: 5px;
        }
    </style>
    </head>
    <body>
        <center>
        <h1 style="">通讯录</h1>
        <form action="${pageContext.request.contextPath}/UserServlet?method=saveAdd" method="post">
            <table border="1" style="border-collapse: collapse; border-color: blue;">
                <!-- 表单内容 -->
                <tr>
                    <td>姓名</td>
                    <td><input type="text" name="name"></td>
                </tr>
                <tr>
                    <td>性别</td>
                    <td>
                        <input type="radio" name="sex" value="男">男
                        <input type="radio" name="sex" value="女">女
                    </td>
                </tr>
                <tr>
                <td>电话号码</td>
                    <td><input type="text" name="phone"></td>
                </tr>
                <tr>
                    <td>QQ号码</td>
                    <td><input type="text" name="QQ"></td>
                </tr>
                <tr>
                <td>Email</td>
                    <td><input type="text" name="Email"></td>
                </tr>
                <tr>
                    <td>地址</td>
                    <td><input type="text" name="address"></td>
                </tr>
                <!-- 其他操作 -->
                <tr>
                    <td colspan="2" align="center">
                        <input type="submit" value="添加">
                    </td>
                </tr>
            </table>
        </form>
        </center>
    </body>
</html>

updateUser.jsp
html>
<head>
    <title>修改联系人</title>
    <style type="text/css">
        th, td{
            padding: 5px;
        }
    </style>
    </head>
    <body>
        <center>
        <h1 style="">通讯录</h1>
        <form action="${pageContext.request.contextPath}/UserServlet?method=update" method="post">
            <table border="1" style="border-collapse: collapse; border-color: blue;">
                <!-- 表单内容 -->
                <tr>
                    <td>姓名</td>
                    <td><input type="text" name="name" value="${requestScope.user.name}">
                    <input type="hidden" name="id" value="${requestScope.user.id}"></td>
                </tr>
                <tr>
                    <td>性别</td>
                    <td>
                        <input type="radio" name="sex" value="男" ${(user.sex eq '男') ? "checked" : "" }>男
                        <input type="radio" name="sex" value="女" ${(user.sex eq '女') ? "checked" : "" }>女

       </td>
                </tr>
                <tr>
                <td>电话号码</td>
                    <td><input type="text" name="phone" value="${requestScope.user.phone}"></td>
                </tr>
                <tr>
                    <td>QQ号码</td>
                    <td><input type="text" name="QQ" value="${requestScope.user.QQ}"></td>
                </tr>
                <tr>
                <td>Email</td>
                    <td><input type="text" name="Email" value="${requestScope.user.email}"></td>
                </tr>
                <tr>
                    <td>地址</td>
                    <td><input type="text" name="address" value="${requestScope.user.address}"></td>
                </tr>
                <!-- 其他操作 -->
                <tr>
                    <td colspan="2" align="center">
                        <input type="submit" value="修改">
                    </td>
                </tr>
            </table>
        </form>
        </center>
    </body>
</html>

最后配置一个数据库连接池c3p0-config.xml
<?xml version="1.0" encoding="UTF-8"?>
<c3p0-config>
  <default-config>
    <property name="driverClass">com.mysql.jdbc.Driver</property>
    <property name="jdbcUrl">jdbc:mysql:///tongxunlu</property>
    <property name="user">root</property>
    <property name="password">root</property>
    
    <property name="initialPoolSize">5</property>
    <property name="maxPoolSize">15</property>
    <property name="minPoolSize">1</property>
    <property name="maxIdleTime">2000</property>
  </default-config>
</c3p0-config>

jdbc的通讯录CRUD的更多相关文章

  1. jdbc连接数据库以及crud(简单易懂,本人亲测可用 有源代码和数据库)

    今天呢!重新整理了一边jdbc的相关操作:现在来说对于很多框架都使用mybatis和hibernate来操作数据库 ,也有很多使用自己简单封装的ssm或者是其他的一些框架来操作数据库,但是无论使用哪一 ...

  2. JDBC操作MySQL(crud)

    这两天复习了一下JDBC操作MySQL,把crud操作的例子记一下, 类库链接(mysql-connector-java-5.1.37-bin.jar):http://files.cnblogs.co ...

  3. 二.使用JDBC对数据库CRUD

    一.statement对象介绍 Jdbc中的statement对象用于向数据库发送SQL语句,想完成对数据库的增删改查,只需要通过这个对象向数据库发送增删改查语句即可. Statement对象的exe ...

  4. [转载]JavaEE学习篇之——JDBC详解

    原文链接:http://blog.csdn.net/jiangwei0910410003/article/details/26164629 目录1.摘要2.JDBC的使用步骤 1.注册驱动 只做一次 ...

  5. JMeter使用记录1 -- JDBC測试

    场景:使用jmeter对web应用和mysql数据库进行压力測试 JMeter是一款很强大的測试工具.能够用来測试web,数据库.从07年用过之后一直对它情有独钟,以下记录下在一个项目中对它的简单使用 ...

  6. J2EE学习的一部分--JDBC详细说明

    今天是关于我们JDBC相关知识,左右JDBC我想大家都很熟悉的,我记得在很早以前就开始使用它,我记得那是一个大二的学生做课程设计.但随后以完成任务,所以遇到的问题google,当时没有时间组织,下关于 ...

  7. spring框架总结(04)----介绍的是Spring中的JDBC模板

    1.1  Jdbc模板概述 它是spring框架中提供的一个对象,是对原始Jdbc API对象的简单封装.spring框架为我们提供了很多的操作模板类,入下图所示: 我们今天的主角在spring-jd ...

  8. JDBC也就那么回事

    JDBC 一.JDBC概述 为什么要使用JDBC? JDBC:Java DataBase Connectivity,是SUN公司提供的一套操作数据库的标准规范(技术). JDBC与数据库驱动的关系:接 ...

  9. java框架之Spring(3)-JDBC模板使用&事务管理

    下面内容使用到的 jar 包下载 JDBC模板使用 入门 1.导包,如要导入 Spring 的基本开发包.数据库驱动包.Spring 提供的 JDBC 模板包,如下: 2.测试: @Test publ ...

随机推荐

  1. 【转】CSS实现兼容性的渐变背景(gradient)效果

    一.有点俗态的开场白 要是两年前,实现“兼容性的渐变效果”这个说法估计不会被提出来的,那个时候,说起渐变背景,想到的多半是IE的渐变滤镜,其他浏览器尚未支持,但是,在对CSS3支持日趋完善的今天,实现 ...

  2. AngularJS(16)-路由

    AngularJS 路由 本章节我们将为大家介绍 AngularJS 路由. AngularJS 路由允许我们通过不同的 URL 访问不同的内容. 通过 AngularJS 可以实现多视图的单页Web ...

  3. 本地安装gem install --local redis-stat-0.4.13.gem

    因为主机环境不能联外网,悲哀,所以只能想办法下载包,上传到主机来安装 环境:el6.x86_64 1. gem 安装[http://centos.ustc.edu.cn/centos/6/os/x86 ...

  4. 每日一“酷”之copy

    Copy – 复制对象 作用:提供一些函数,可以使用浅副本或深副本语义复制对象. copy模块包括两个函数copy()和deepcopy(),用于复制现有的对象 1.  浅副本 copy()创建的浅副 ...

  5. MvvmCross for WPF File Plugin

    本文以MvvmCross为框架基础 最近用了File Plugin插件,一开始也是没用明白,写一下记录下来,也方便需要的人吧 首先这个File Plugin需要先在UI项目里创建一个Bootstrap ...

  6. 1100. Mars Numbers (20)

    People on Mars count their numbers with base 13: Zero on Earth is called "tret" on Mars. T ...

  7. eclipse安装pydev插件

    打开Eclipse,找到Help菜单栏,进入Install New Software…选项. 点击work with:输入框的旁边点击Add…,Name可以随便输入,Location是http://p ...

  8. Python默认模块 os和shutil 实用函数

    os.sep 可以取代操作系统特定的路径分隔符.windows下为 '\\' os.name 字符串指示你正在使用的平台.比如对于Windows,它是'nt',而对于Linux/Unix用户,它是 ' ...

  9. STM32普通定时器实现延时函数

    /* SystemFrequency / 1000 1ms中断一次 * SystemFrequency / 100000 10us中断一次 * SystemFrequency / 1000000 1u ...

  10. 用于主题检测的临时日志(d94169f9-f1c0-45a2-82d4-6edc4bd35539 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)

    这是一个未删除的临时日志.请手动删除它.(5327dce0-d2d1-4fba-8801-d3ff67564a96 - 3bfe001a-32de-4114-a6b4-4005b770f6d7)