基于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. eclipse 4 rcp: java.lang.RuntimeException: No application id has been found.

    错误详情: java.lang.RuntimeException: No application id has been found. at org.eclipse.equinox.internal. ...

  2. Ubuntu16.04.1 安装MyCat

    Mycat是一个开源的分布式数据库系统,但是由于真正的数据库需要存储引擎,而Mycat并没有存储引擎,所以并不是完全意义的分布式数据库系统. 安装Java环境,配置全局环境变量 MyCAT是使用JAV ...

  3. .NET开发之窗体间的传值转化操作

    DOTNET开发之窗体间的传值转化操作 好想把自己最近学到的知识写下来和各位朋友分享,也希望得到大神的指点.今天终于知道自己要写点什么,就是关于WPF开发时简单的界面传值与简单操作. 涉及两个界面:一 ...

  4. Android Studio快速开发之道(各种语法糖)

    现如今开发越来越追求效率和节奏,节省出时间做更多的事情,除了开发技术上的封装等,开发工具的使用技巧也是很重要的,今天就根据自己的经验来给大家介绍一下Android Studio快速开发之道. Post ...

  5. 11G RAC 简单命令

    1.查看集群状态: [root@rac1 ~]# su - grid [grid@rac1 ~]$ crsctl check clusterCRS-4537: Cluster Ready Servic ...

  6. 多实例MySQL批量添加用户和密码并授权

    OS:Cent OS 6.3 DB:5.5.14 如果一台服务器上有100个MySQL数据库实例,此时需要给不同端口的几个数据库添加用户名.密码并授权应用IP,一个个授权没问题,反正累的不是我,哇咔咔 ...

  7. Oracle RAC 11gR2 修改本地及SCAN监听端口

        昨天同事说有套RAC集群客户要求修改数据库的监听端口,在处理的过程中,发现网上的相关资料都不是很全面,所以整理了一下,希望给其他有需要的朋友提供一点有利的参考资料.具体操作过程如下:     ...

  8. python之量的概念

    程序设计语言: 量的类型: 1. 直接量 2. 常量 3. 变量 量的因素: 1. 存储类别 2. 数据类型 3. 作用域 4. 生存期

  9. andriod

    谷歌提供的安卓源码中,网址如下:http://androidxref.com http://blog.csdn.net/zoe6553/article/details/6622258

  10. Java Day 05

    数组第二种定义 数组-遍历 数组操作的核心思想就是对角标的操作: 数组-求最值 1.循环 比较 排序 选择排序 把原始数组分割成了两个数组,至少有一个是有序的 冒泡排序 相邻元素比较 位置置换代码提取 ...