1. package com.hu.dao;
  2.  
  3. import com.hu.entity.Student;
  4.  
  5. import java.util.List;
    import java.util.Map;
  6.  
  7. public interface StudentDao {
    boolean add(Student s);
    boolean delete(int id);
    boolean update(Student s);
    /**
    * 根据 id 查询学生信息
    * Map 是一个key value 的键值映射
    *
    * 将一个学生的信息进行返回
    * 数据库:
    * id name age
    * 1 张三 18
    * java类型接收 : 一个返回值类型 返回id name age 三个数据
    * Student s = new Student();
    * s.setId(1);
    * s.setName(""张三);
    * s.setAge(18);
    *
    * Map map = new HashMap()
    * map.put("id",1);
    * map.put("name","张三");
    * map.put("age",18);
    *
    * Student id = 1 name age
    * Map id: 1 name:zhangsan age 18
    */
    Map<String,Object> getStudent(int id);
    // 查询所有学生
    List<Map<String , Object>> getAllStudent();
    }
  1. package com.hu.dao.impl;
  2.  
  3. import com.hu.dao.StudentDao;
    import com.hu.entity.Student;
    import com.hu.util.DButil;
  4.  
  5. import java.util.List;
    import java.util.Map;
  6.  
  7. public class StudentDaoImpl implements StudentDao {
    @Override
    public boolean add(Student s) {
    String sql = "insert into student (name,age) values(?,?)";
    return DButil.executeUpdate(sql,s.getName(),s.getAge());
    }
  8.  
  9. @Override
    public boolean delete(int id) {
    String sql = "delete from student where id=?";
    return DButil.executeUpdate(sql,id);
    }
  10.  
  11. @Override
    public boolean update(Student s) {
    String sql = "update student set name=? ,age=? where id=? ";
    return DButil.executeUpdate(sql,s.getName(),s.getAge(),s.getId());
    }
  12.  
  13. @Override
    public Map<String, Object> getStudent(int id) {
    String sql = "select * from student where id = ?";
    List<Map<String, Object>> lms = DButil.executeQuery(sql,id);
    if (lms.size()>0) {
    return lms.get(0);
    }
    return null;
    }
  14.  
  15. @Override
    public List<Map<String, Object>> getAllStudent() {
    String sql = "select * from student";
    return DButil.executeQuery(sql);
    }
    }
  1. package com.hu.servlet;
  2.  
  3. import com.hu.dao.Login;
    import com.hu.dao.StudentDao;
    import com.hu.dao.impl.LoginImpl;
    import com.hu.dao.impl.StudentDaoImpl;
    import com.hu.entity.Student;
    import org.junit.Test;
  4.  
  5. import java.util.List;
    import java.util.Map;
  6.  
  7. public class LoginTest {
    @Test
    public void fun1(){
    Student s = new Student(3,"白骨精",26);
    StudentDao sd = new StudentDaoImpl();
    // 增 boolean add = sd.add(s);
    // 删 boolean delete = sd.delete(5);
    // 改 boolean update = sd.update(s);
    // 根据id查 Map<String, Object> student = sd.getStudent(4);
    // 全部查询
    List<Map<String, Object>> allStudent = sd.getAllStudent();
    System.out.println(allStudent);
    }
  1. package com.hu.util;
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
  2.  
  3. /**
    * JDBC工具类
    */
    public class DButil{
  4.  
  5. static {
    try {
    Class.forName("com.mysql.jdbc.Driver");
    } catch (ClassNotFoundException e) {
    e.printStackTrace();
    }
    }
  6.  
  7. public static Connection getConnection(){
    try {
    return DriverManager.getConnection("jdbc:mysql://localhost:3306/shabi?characterEnconding=UTF-8", "root", "root");
    } catch (SQLException e) {
    e.printStackTrace();
    }
    return null;
    }
    /** 增删改的通用方法
    * @paramString sql 要执行的sql
    * @paramObject[] obj 对象类型的数组 里面存放着 sql执行的占位符参数
    * 【name,age,id】
    * 【id】
    * 【name,age】
    * Object... 可变参数
    * */
    public static boolean executeUpdate(String sql,Object... args){
    Connection conn = null;
    PreparedStatement ps = null;
    try {
    conn = getConnection();
    ps = conn.prepareStatement(sql);
  8.  
  9. for (int i=0;i<args.length;i++){
    ps.setObject(i+1,args[i]);
    }
    int i = ps.executeUpdate();
    if (i>0)return true;
    } catch (SQLException e) {
    e.printStackTrace();
    } finally {
    //关闭
    close(conn,ps,null);
    }
    return false;
    }
  10.  
  11. /**
    * c查询的通用方法
    * @param sql
    * @param args
    * @return
    */
    public static List<Map<String,Object>> executeQuery(String sql,Object... args){
    Connection conn = null;
    PreparedStatement ps = null;
    ResultSet set = null;
    try {
    conn = DButil.getConnection();
    ps = conn.prepareStatement(sql);
    /* 有可能有参数 */
    for (int i=0;i<args.length;i++){
    ps.setObject(i+1,args[i]);
    }
    /*执行*/
    set = ps.executeQuery();
    /*需要将所有数据都存放到 List中 每一行 用一个 map存放*/
    List<Map<String,Object>> list = new ArrayList<>();
    /*获取本次查询结果集有多少列*/
    int count = set.getMetaData().getColumnCount();
  12.  
  13. while(set.next()){
    Map<String, Object> map = new HashMap<>();//一行数据 用一个map 接收
  14.  
  15. for(int i=0;i<count;i++){
    String name = set.getMetaData().getColumnLabel(i+1);
    map.put(name,set.getObject(name));
    }
    /*将每行的map存放到 List中*/
    list.add(map);
    }
    return list;
    } catch (Exception e) {
    e.printStackTrace();
    }finally {
    close(conn,ps,set);
    }
    return null;
    }
  16.  
  17. /** 关闭的通用方法
    *
    * */
    private static void close(Connection conn,PreparedStatement st,ResultSet set){
    try {
    if(set!=null){
    set.close();
    }
    if(st!=null){
    st.close();
    }
    if(conn != null){
    conn.close();
    }
    }catch (Exception e){
    e.printStackTrace();
    }
    }
  18.  
  19. }

IDEA中通过工具类实现对数据库的增删改查的更多相关文章

  1. PHP程序中使用PDO对象实现对数据库的增删改查操作的示例代码

    PHP程序中使用PDO对象实现对数据库的增删改查操作(PHP+smarty) dbconn.php <?php //------------------------使用PDO方式连接数据库文件- ...

  2. 学习MyBatis必知必会(5)~了解myBatis的作用域和生命周期并抽取工具类MyBatisUtil、mybatis执行增删改查操作

    一.了解myBatis的作用域和生命周期[错误的使用会导致非常严重的并发问题] (1)SqlSessionFactoryBuilder [ 作用:仅仅是用来创建SqlSessionFactory,作用 ...

  3. 共享参数ContentProvider 类与数据库绑定,如何通过共享参数测试类,测试数据库的增删改查功能

    Intent可以传一个对象 当两个界面之间跳转时,需要传递一个对象过去,是通过使用Bundle类,并且实体类需要serializable实现序列化,传递方法如下: 定义一个静态常量作为key值 pub ...

  4. MySQL数据库学习笔记(十一)----DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  5. DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类)

    DAO设计模式实现数据库的增删改查(进一步封装JDBC工具类) 一.DAO模式简介 DAO即Data Access Object,数据访问接口.数据访问:故名思义就是与数据库打交道.夹在业务逻辑与数据 ...

  6. MySQL数据库学习笔记(十二)----开源工具DbUtils的使用(数据库的增删改查)

    [声明] 欢迎转载,但请保留文章原始出处→_→ 生命壹号:http://www.cnblogs.com/smyhvae/ 文章来源:http://www.cnblogs.com/smyhvae/p/4 ...

  7. 开源工具DbUtils的使用(数据库的增删改查)

    开源工具DbUtils的使用(数据库的增删改查) 一.DbUtils简介: DBUtils是apache下的一个小巧的JDBC轻量级封装的工具包,其最核心的特性是结果集的封装,可以直接将查询出来的结果 ...

  8. Android 系统API实现数据库的增删改查和SQLite3工具的使用

    在<Android SQL语句实现数据库的增删改查>中介绍了使用sql语句来实现数据库的增删改查操作,本文介绍Android 系统API实现数据库的增删改查和SQLite3工具的使用. 系 ...

  9. [译]聊聊C#中的泛型的使用(新手勿入) Seaching TreeVIew WPF 可编辑树Ztree的使用(包括对后台数据库的增删改查) 字段和属性的区别 C# 遍历Dictionary并修改其中的Value 学习笔记——异步 程序员常说的「哈希表」是个什么鬼?

    [译]聊聊C#中的泛型的使用(新手勿入)   写在前面 今天忙里偷闲在浏览外文的时候看到一篇讲C#中泛型的使用的文章,因此加上本人的理解以及四级没过的英语水平斗胆给大伙进行了翻译,当然在翻译的过程中发 ...

随机推荐

  1. 奇怪,Linux下find找不到文件了

    你遇到过linux下root用户执行find命令按文件名在根目录下查找不到指定文件的情况吗?如果你遇到这种情况,你分析可能有哪几种原因导致?这里记录一下这个有意思的问题. 问题现象 实现一个工具,需要 ...

  2. MySQL InnoDB 事务实现过程相关内容的概述

    MySQL事务的实现涉及到redo和undo以及purge,redo是保证事务的原子性和持久性:undo是保证事务的一致性(一致性读和多版本并发控制):purge清理undo表空间背景知识,对于Inn ...

  3. jmeter学习笔记--线程组

    jmeter组件:线程组 是什么? 进程:一个正在执行的程序对应一个进程 线程:进程中的执行线索(一个进程中有多个执行线索) 线程组:按照线程性质对线程进行分组 并发执行:多个线程同时进行    特点 ...

  4. Java8 之stream

    总概述:Java 8 中的 Stream 是对集合(Collection)对象功能的增强,它专注于对集合对象进行各种非常便利.高效的聚合操作(aggregate operation),或者大批量数据操 ...

  5. find 递归/不递归 查找子目录的方法

    1.递归查找(find 命令 是递归遍历文件夹的) 命令:find . -name “*.txt” //当前路径下递归查找以.txt结尾的文件夹 2.不递归查找 find . -name “*.txt ...

  6. Gulp教程之:Gulp能做什么,前端装逼为何要用它

    我们先说说 平时web开发遇到的一些场景 和 苦恼无奈的情况: JavaScript和CSS的版本问题 我们都知道 JavaScript和CSS属于静态文件,如果地址不变,浏览器会缓存这些文件,那就意 ...

  7. openstack swift 安装(单独对象存储服务)

    参考:https://docs.openstack.org/mitaka/zh_CN/install-guide-rdo/swift.html 安装YUM包 yum install centos-re ...

  8. CentOS7更改运行级别

    Step 1:查看系统默认运行级别 [root@node-1 html]# systemctl get-default       //图形界面graphical.target [root@node- ...

  9. 2018-2019-2 20175126谢文航 实验二《Java面向对象程序设计》实验报告

    一.实验报告封面 课程:Java程序设计 班级:1751 班 姓名:谢文航 学号:20175126 指导教师:娄嘉鹏 实验日期:2019年4月17日 实验时间:--- 实验序号:实验二 实验名称:Ja ...

  10. 轮播插件swiper

    使用步骤 1.引用js <script src="swiper/swiper.min.js" type="text/javascript" charset ...