package com.hu.dao;

import com.hu.entity.Student;

import java.util.List;
import java.util.Map; 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();
}
package com.hu.dao.impl;

import com.hu.dao.StudentDao;
import com.hu.entity.Student;
import com.hu.util.DButil; import java.util.List;
import java.util.Map; 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());
} @Override
public boolean delete(int id) {
String sql = "delete from student where id=?";
return DButil.executeUpdate(sql,id);
} @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());
} @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;
} @Override
public List<Map<String, Object>> getAllStudent() {
String sql = "select * from student";
return DButil.executeQuery(sql);
}
}
package com.hu.servlet;

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; import java.util.List;
import java.util.Map; 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);
}
package com.hu.util;
import java.sql.*;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import java.util.Map; /**
* JDBC工具类
*/
public class DButil{ static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
} 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); 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;
} /**
* 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(); while(set.next()){
Map<String, Object> map = new HashMap<>();//一行数据 用一个map 接收 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;
} /** 关闭的通用方法
*
* */
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();
}
} }

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网络编程学习(十一) ----- 五种I/O模式(第六章)

    1.五种I/O模式是哪几个? 阻塞I/O,非阻塞I/O,I/O多路复用,信号驱动I/O(SIGIO),异步I/O 一般来讲程序进行输入操作有两个步骤,一是等待有数据可读,二是将数据从系统内核中拷贝到程 ...

  2. RabbitMQ的安装与配置

    一.安装环境 CentOS6.3 64位操作系统. 二.安装文件 1.安装erlang:Rabbitmq是基于erlang语言开发的,所以先需要安装erlang:我选择的安装包是:erlang-17. ...

  3. pyqgis学习

    1. 错误:ImportError: No module named qgis.core解决方法:python的qgis,初始化变量:D:\PROGRA~1\QGIS3~1.0\OSGeo4W.bat ...

  4. Win10 远程桌面连接出现“要求的函数不受支持”的解决办法之修改注册表

    问题起因 笔者自己在阿里云上搞服务器,有一台 Windows Server 必须通过远程桌面连接来管理,由于没能完全关掉 Win10 自带的烦人的系统更新,导致昨天安装完更新后出现了连接远程桌面时“要 ...

  5. 2019-04-28——Django学习

    1.Django: Python Web应用开发框架,Django是走大而全的方向,它最出名的是其全自动化的管理后台:只需要使用起ORM,做简单的对象定义,它就能自动生成数据库结构.以及全功能的管理后 ...

  6. L2-025 分而治之(并查集)

    分而治之,各个击破是兵家常用的策略之一.在战争中,我们希望首先攻下敌方的部分城市,使其剩余的城市变成孤立无援,然后再分头各个击破.为此参谋部提供了若干打击方案.本题就请你编写程序,判断每个方案的可行性 ...

  7. 天坑!c++调用python,遭遇R6034问题

    起源: AllMyTube下载核心,是c#组件调用c++dll,在dll中初始化Python运行环境.在工作目录有msvcr90.dll文件时,程序运行会弹出如下错误: R6034. -------- ...

  8. iview 路由权限判断的处理

    主要是在main.vue做处理 其它地方不需要处理 menuList () { let getRouter = JSON.parse(sessionStorage.getItem('getUserDa ...

  9. 11.Redis缓存设计

    11.Redis缓存设计11.1 缓存的收益和成本11.2 缓存更新策略11.3 缓存粒度控制11.4 穿透优化11.5 无底洞优化11.6 雪崩优化11.7 热点key重建优化11.8 本章重点回顾

  10. python基础 ---time,datetime,collections)--时间模块&collections 模块

    python中的time和datetime模块是时间方面的模块 time模块中时间表现的格式主要有三种: 1.timestamp:时间戳,时间戳表示的是从1970年1月1日00:00:00开始按秒计算 ...