Java通讯录管理系统

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群系列 2核4GB
推荐场景:
搭建个人博客
RDS MySQL Serverless 高可用系列,价值2615元额度,1个月
简介: 使用DAO分层设计模式设计了通讯管理系统使用了c3p0地址池和dbutils,没有写前端,连接的是mysql数据库,不涉及到太多的技术,仅供入门JDBC的小伙伴参考一下

Java通讯录管理系统

  • 使用DAO分层设计模式设计了通讯管理系统
  • 使用了c3p0地址池和dbutils,没有写前端,连接的是mysql数据库,不涉及到太多的技术,仅供入门JDBC的小伙伴参考一下.

简介

其中写的类和文件先简单介绍一下:

c3p0-config.xml c3p0地址池配置文件
com.test.Utils 地址池连接工具类
com.test.CreateAddress 对mysql中的test数据库创建test表
com.test.AddressListTest 通讯录操作主方法
com.javabean.AddressList 通讯录实体类
com.dao.AddressHandle 通讯录定义规则
com.dao.impl.AddressHandleimpl 通讯录操作具体实现

使用到的jar包

在这里插入图片描述

c3p0配置文件

命名一定要是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://localhost:3306/test</property>
        <property name="user">root</property>
        <property name="password">root1</property>
        
        <property name="initialPoolSize">5</property>
        <property name="maxPoolSize">10</property>
        <property name="checkoutTimeout">2000</property>
        <property name="maxIdleTime">1000</property>
    </default-config>>
</c3p0-config>

C3p0连接池工具类

package com.test;
/**
 * 生成c3p0连接池的工具类
 * getConnection()获取默认数据的连接
 * getDataSource()获取默认的数据源
 */
import java.sql.Connection;
import java.sql.SQLException;
import javax.sql.DataSource;
import com.mchange.v2.c3p0.ComboPooledDataSource;

public class Utils {
    public static DataSource ds = new ComboPooledDataSource();
    
    public static Connection getConnection() {
        Connection c = null;
        try {
            c = ds.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return c;
    }
    
    public static DataSource getDataSource() {
        return ds;
    }
}

创建test数据库中的test表

package com.test;

import java.sql.SQLException;
import org.apache.commons.dbutils.QueryRunner;

/**
 * 用于生成默认配置(test)数据库中的一个表(test)
 */
public class CreateAddress {
    public static void main(String[] args) {
        QueryRunner qr = new QueryRunner(Utils.getDataSource());
        
        String sql = "create table test("
                + "name varchar(10) primary key,"
                + "workUnit varchar(255),"
                + "num char(11) not null,"
                + "e_mail varchar(32)"
                + ");";
        try {
            qr.update(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        System.out.println("test表创建成功");
    }
}

书写通讯实体类

可以实现序列化接口,这里我没有实现,但不影响使用

package com.javabean;
/**
 * 通讯录类
 */
public class AddressList {
    private String name;
    private String workUnit;
    private String num;
    private String e_mail;
    
    public AddressList() {
        super();
    }

    public AddressList(String name, String workUnit, String num, String e_mail) {
        super();
        this.name = name;
        this.workUnit = workUnit;
        this.num = num;
        this.e_mail = e_mail;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getWorkUnit() {
        return workUnit;
    }

    public void setWorkUnit(String workUnit) {
        this.workUnit = workUnit;
    }

    public String getNum() {
        return num;
    }

    public void setNum(String num) {
        this.num = num;
    }

    public String getE_mail() {
        return e_mail;
    }

    public void setE_mail(String e_mail) {
        this.e_mail = e_mail;
    }

    @Override
    public String toString() {
        return "AddressList [name=" + name + ", workUnit=" + workUnit + ", num=" + num + ", e_mail=" + e_mail + "]";
    }
    
}

定义通讯录管理系统规则

package com.dao;

import com.javabean.AddressList;

public interface AddressHandle {
    
    public abstract void add(String s1,String s2,String s3,String s4);
    
    public abstract void remove(String s1);
    
    public abstract void update(String s1,String s2,String s3);
    
    public abstract AddressList select(String name);
    
    public abstract AddressList selectnum(String name);
    
    public abstract void show();
    
}

通讯录管理系统规则接口的实现类

package com.dao.impl;

import java.sql.SQLException;
import java.util.List;

import org.apache.commons.dbutils.QueryRunner;
import org.apache.commons.dbutils.handlers.BeanHandler;
import org.apache.commons.dbutils.handlers.BeanListHandler;

import com.dao.AddressHandle;
import com.javabean.AddressList;
import com.test.Utils;

public class AddressHandleimpl implements AddressHandle {

    @Override
    public void add(String s1, String s2, String s3, String s4) {
        AddressList add = select(s1);
        if (add != null) {
            System.out.println("您存在此联系人,您可能需要修改业务");
        } else {
            QueryRunner qr = new QueryRunner(Utils.getDataSource());

            String sql = "insert into test values (?,?,?,?)";

            int update = 0;
            try {
                update = qr.update(sql, s1, s2, s3, s4);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            if (update > 0) {
                System.out.println("插入成功");
            } else {
                System.out.println("插入失败,可能的原因是您输入的内容不合法,无法帮您存进数据库");
                System.out.println("友情提示:手机号最多11位");
                System.out.println("友情提示:姓名最多10个字符");
            }
        }

    }

    @Override
    public void remove(String s1) {
        AddressList add = select(s1);
        if (add == null) {
            System.out.println("此联系人不存在,无法进行删除修改,您可能需要别的功能");
        } else {
            QueryRunner qr = new QueryRunner(Utils.getDataSource());
            int update = 0;

            String sql = "delete from test where name=?";

            try {
                update = qr.update(sql, s1);
            } catch (SQLException e) {
                e.printStackTrace();
            }
            
            if (update > 0) {
                System.out.println("删除成功");
            } else {
                System.out.println("删除失败,可能的原因是您输入的内容不合法,无法帮您删除");
            }
        }

    }

    @Override
    public void update(String s1, String s2, String s3) {
        AddressList add = select(s1);
        if (add == null) {
            System.out.println("此联系人不存在,无法进行修改,您可能需要插入功能");
        } else {
            QueryRunner qr = new QueryRunner(Utils.getDataSource());
            int update = 0;

            String sql = "update test set name=?,workUnit=?,num=?,e_mail=? where name=?";

            if ("a".equalsIgnoreCase(s2)) {
                try {
                    update = qr.update(sql, s3, add.getWorkUnit(), add.getNum(), add.getE_mail(), s1);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }  else if ("b".equalsIgnoreCase(s2)) {
                try {
                    update = qr.update(sql, add.getName(), add.getWorkUnit(), s3, add.getE_mail(), s1);
                } catch (SQLException e) {
                    e.printStackTrace();
                }
            }  else {
                System.out.println("您输入要修改的选项有误");
            }

            if (update > 0) {
                System.out.println("更新成功");
            } else {
                System.out.println("更新失败,可能的原因是您输入的内容不合法,无法帮您更新进数据库");
            }
        }

    }

    @Override
    public AddressList select(String name) {

        QueryRunner qr = new QueryRunner(Utils.getDataSource());

        String sql = "select * from test where name = ?";

        AddressList add = null;
        try {

            add = qr.query(sql, new BeanHandler<>(AddressList.class), name);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return add;

    }

    @Override
    public void show() {
        QueryRunner qr = new QueryRunner(Utils.getDataSource());

        String sql = "select * from test";

        List<AddressList> list = null;
        try {
            list = qr.query(sql, new BeanListHandler<>(AddressList.class));
        } catch (SQLException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        int count = 0;

        for (AddressList address : list) {
            System.out.println(address);
            count++;
        }
        System.out.println("查询到了" + count + "条记录");
    }

    @Override
    public AddressList selectnum(String name) {
        QueryRunner qr = new QueryRunner(Utils.getDataSource());

        String sql = "select * from test where num = ?";

        AddressList add = null;
        try {

            add = qr.query(sql, new BeanHandler<>(AddressList.class), name);
        } catch (SQLException e) {
            e.printStackTrace();
        }

        return add;
    }

}

操作通讯录管理系统的main方法

package com.test;

import java.util.Scanner;

import com.dao.impl.AddressHandleimpl;
import com.javabean.AddressList;

public class AddressListTest {
    public static void main(String[] args) {
        AddressHandleimpl address = new AddressHandleimpl();
        Scanner sc = new Scanner(System.in);
        while (true) {
            System.out.println("[A]插入 [B]修改 [C]删除 [D]显示 [E] 根据名字查询 [F]根据手机号查询[G]退出");
            System.out.println("请输入您的选择,不区分大小写");
            String str1 = sc.nextLine();

            if ("a".equalsIgnoreCase(str1)) {// 插入
                System.out.println("请输入您要插入的名字");
                String name1 = sc.nextLine();
                System.out.println("请输入您要插入的工作单位");
                String name2 = sc.nextLine();
                System.out.println("请输入您要插入的电话号码");
                String name3 = sc.nextLine();
                System.out.println("请输入您要插入的电子邮箱");
                String name4 = sc.nextLine();

                address.add(name1, name2, name3, name4);

            } else if ("b".equalsIgnoreCase(str1)) {// 修改

                System.out.println("请输入您要修改的联系人的姓名是?");
                String name1 = sc.nextLine();

                System.out.println("[A]姓名[B]电话号码");
                System.out.println("请输入您要修改的选项,必须是A B中的一个,否则会报错");
                String name2 = sc.nextLine();
                System.out.println("请您输入修改后的值");
                String name3 = sc.nextLine();

                address.update(name1, name2, name3);

            } else if ("c".equalsIgnoreCase(str1)) {// 删除
                System.out.println("请输入您要删除的联系人的姓名是?");
                String name1 = sc.nextLine();
                System.out.println("您确定要删除的联系人的姓名是" + name1 + "确定为Y,不确定为N");
                String name2 = sc.nextLine();
                if ("y".equalsIgnoreCase(name2)) {
                    address.remove(name1);
                } else if ("n".equalsIgnoreCase(name2)) {
                    System.out.println("您以否定,我们不会删除");
                } else {
                    System.out.println("您输入的不是Y和N,退出删除功能");
                }

            } else if ("d".equalsIgnoreCase(str1)) {// 显示

                address.show();

            } else if ("e".equalsIgnoreCase(str1)) {// 查询
                System.out.println("请输入您要查询的名字");

                String name = sc.nextLine();
                AddressList add = address.select(name);

                if (add != null) {
                    System.out.println("查询有此人");
                    System.out.println(add);
                } else {
                    System.out.println("查询无此人");
                }

            } else if ("f".equalsIgnoreCase(str1)) {// 根据手机号查询
                System.out.println("请输入您要查询的手机号");

                String name = sc.nextLine();
                AddressList add = address.select(name);

                if (add != null) {
                    System.out.println("查询有此人");
                    System.out.println(add);
                } else {
                    System.out.println("查询无此人");
                }
            } else if ("g".equalsIgnoreCase(str1)) {// 退出
                System.out.println("退出成功");
                break;
            } else {// 删除
                System.out.println("您输入的选项有误,请重新输入");
            }
        }
        sc.close();
    }
相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
1月前
|
Java Apache Maven
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
文章提供了使用Apache POI库在Java中创建和读取Excel文件的详细代码示例,包括写入数据到Excel和从Excel读取数据的方法。
59 6
Java百项管理之新闻管理系统 熟悉java语法——大学生作业 有源码!!!可运行!!!
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的服装商城管理系统
基于Java+Springboot+Vue开发的服装商城管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的服装商城管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
147 2
基于Java+Springboot+Vue开发的服装商城管理系统
|
12天前
|
运维 自然语言处理 供应链
Java云HIS医院管理系统源码 病案管理、医保业务、门诊、住院、电子病历编辑器
通过门诊的申请,或者直接住院登记,通过”护士工作站“分配患者,完成后,进入医生患者列表,医生对应开具”长期医嘱“和”临时医嘱“,并在电子病历中,记录病情。病人出院时,停止长期医嘱,开具出院医嘱。进入出院审核,审核医嘱与住院通过后,病人结清缴费,完成出院。
42 3
|
16天前
|
Java 数据库连接 数据库
深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能
在Java应用开发中,数据库操作常成为性能瓶颈。本文通过问题解答形式,深入探讨Java连接池技术如何通过复用数据库连接、减少连接建立和断开的开销,从而显著提升系统性能。文章介绍了连接池的优势、选择和使用方法,以及优化配置的技巧。
16 1
|
18天前
|
JavaScript Java 项目管理
Java毕设学习 基于SpringBoot + Vue 的医院管理系统 持续给大家寻找Java毕设学习项目(附源码)
基于SpringBoot + Vue的医院管理系统,涵盖医院、患者、挂号、药物、检查、病床、排班管理和数据分析等功能。开发工具为IDEA和HBuilder X,环境需配置jdk8、Node.js14、MySQL8。文末提供源码下载链接。
|
21天前
|
移动开发 前端开发 JavaScript
java家政系统成品源码的关键特点和技术应用
家政系统成品源码是已开发完成的家政服务管理软件,支持用户注册、登录、管理个人资料,家政人员信息管理,服务项目分类,订单与预约管理,支付集成,评价与反馈,地图定位等功能。适用于各种规模的家政服务公司,采用uniapp、SpringBoot、MySQL等技术栈,确保高效管理和优质用户体验。
|
23天前
|
XML JSON 监控
告别简陋:Java日志系统的最佳实践
【10月更文挑战第19天】 在Java开发中,`System.out.println()` 是最基本的输出方法,但它在实际项目中往往被认为是不专业和不足够的。本文将探讨为什么在现代Java应用中应该避免使用 `System.out.println()`,并介绍几种更先进的日志解决方案。
46 1
|
27天前
|
Java 关系型数据库 API
介绍一款Java开发的企业接口管理系统和开放平台
YesApi接口管理平台Java版,基于Spring Boot、Vue.js等技术,提供API接口的快速研发、管理、开放及收费等功能,支持多数据库、Docker部署,适用于企业级PaaS和SaaS平台的二次开发与搭建。
|
1月前
|
Java 关系型数据库 MySQL
基于Java的学生成绩管理系统/学生信息管理系统
基于Java的学生成绩管理系统/学生信息管理系统
38 2
|
2月前
|
前端开发 JavaScript Java
基于Java+Springboot+Vue开发的大学竞赛报名管理系统
基于Java+Springboot+Vue开发的大学竞赛报名管理系统(前后端分离),这是一项为大学生课程设计作业而开发的项目。该系统旨在帮助大学生学习并掌握Java编程技能,同时锻炼他们的项目设计与开发能力。通过学习基于Java的大学竞赛报名管理系统项目,大学生可以在实践中学习和提升自己的能力,为以后的职业发展打下坚实基础。
218 3
基于Java+Springboot+Vue开发的大学竞赛报名管理系统