1、 先建四个包

  ① com.tz.entity 实体包

  ② com.tz.dao 数据访问层包

    -> com.tz.dao.impl 实现包

  ③ com.tz.util 工具类包

  ④ com.tz.test 测试包

com.tz.entity 实体包

  新建 Student 实体类

 package com.tz.entity;

 public class Student{
private int id;
private String name;
private String sex;
private String pwd;
private String address;
public Student() {
}
public Student(int id, String name, String sex, String pwd, String address) {
this.id = id;
this.name = name;
this.sex = sex;
this.pwd = pwd;
this.address = address;
}
public int getId() {
return id;
}
public void setId(int id) {
this.id = id;
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getSex() {
return sex;
}
public void setSex(String sex) {
this.sex = sex;
}
public String getPwd() {
return pwd;
}
public void setPwd(String pwd) {
this.pwd = pwd;
}
public String getAddress() {
return address;
}
public void setAddress(String address) {
this.address = address;
}
//
public String toString() {
return "Student [id=" + id + ", name=" + name + ", sex=" + sex
+ ", pwd=" + pwd + ", address=" + address + "]";
} }

com.tz.dao 数据访问层包

  新建StudentDao 接口

 package com.tz.dao;

 import com.tz.entity.Student;

 /**
* 规范 方法名
* 方法有几个,要做哪些方法
*/
public interface StudentDao {
// 增加一个学生
void addStudent(Student s);
// 删除一个学生
int deleteStudent(int id);
// 修改一个学生
Student updateStudent(Student s);
// 查询学生
Student findById(int id);
}

   新建BaseDao 类

 package com.tz.dao;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet; import com.tz.util.DBUtil; /**
* 做所有dao的父类,封装他们基本的增删改操作,
* 因为所有的Dao的增删改操作都一样。
* 只是换了 不同的 sql语句和传入的参数。
*/
public class BaseDao {
private Connection conn;
private PreparedStatement ps;
private ResultSet rs;
/**
* 封装 任何增删改
* sql 传入方法的Sql语句
* Object[] Sql语句里面的参数,因为参数的类型不同 所以Object
*/
public int toUpdate(String sql,Object[] obs){
int a=0;
try {
conn=DBUtil.getConn();
ps=conn.prepareStatement(sql);
// 循环 赋值参数
if(obs!=null&&obs.length>0){
for(int i=0;i<obs.length;i++){
ps.setObject(i+1, obs[i]);
}
}
a=ps.executeUpdate();
return a;
} catch (Exception e) {
e.printStackTrace();
}finally{
DBUtil.closeConn(conn, ps, rs);
}
return a;
}
}

com.tz.dao 数据访问层

    -> com.tz.dao.impl 实现包

    新建StudentDaoImpl 类

 package com.tz.dao.impl;

 import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException; import com.tz.dao.BaseDao;
import com.tz.dao.StudentDao;
import com.tz.entity.Student;
import com.tz.util.DBUtil;
/**
* StudentDao的实现
* Java是单继承的 只能继承一个父类
* 但是可以实现多个接口
* 写 先继承后实现
*/
public class StudentDaoImpl extends BaseDao implements StudentDao{
// 连接组件
private Connection conn;
// 得到预编译的发送Sql语句的组件
private PreparedStatement ps;
// 处理结果集的组件
private ResultSet rs;
public void addStudent(Student s) {
String sql="insert into student(sid,sname,pwd,sex,address) values(?,?,?,?,?)";
Object[] obs={s.getId(),s.getName(),s.getPwd(),s.getSex(),s.getAddress()};
toUpdate(sql, obs);
} public int deleteStudent(int id) {
String sql="delete from student where sid=?";
Object[] obs={id};
int a=toUpdate(sql, obs);
return a;
} public Student updateStudent(Student s) {
String sql="update student set sname=?,pwd=?,sex=?,address=? where sid=?";
Object[] obs={s.getName(),s.getPwd(),s.getSex(),s.getAddress(),s.getId()};
toUpdate(sql, obs);
Student student=findById(s.getId());
return student;
} public Student findById(int id) {
Student s=new Student();
try {
conn=DBUtil.getConn();
String sql="select * from student where sid=?";
ps=conn.prepareStatement(sql);
ps.setObject(1, id);
// 会返回一个int值 表示 你影响了 几行数据
rs=ps.executeQuery();
while(rs.next()){
s.setId(rs.getInt("sid"));
s.setName(rs.getString("sname"));
s.setPwd(rs.getString("pwd"));
s.setAddress(rs.getString("address"));
s.setSex(rs.getString("sex"));
}
return s;
} catch (SQLException e) {
e.printStackTrace();
}finally{
DBUtil.closeConn(conn, ps, rs);
}
return s;
} }

 com.tz.util 工具类包

  新建 db.properties 配置文件

 #Mysql JDBC的连接配置
driver=com.mysql.jdbc.Driver
url=jdbc:mysql://localhost:3306/tz
username=root
pwd=root123

  新建 DBUtil.java 类

 package com.tz.util;

 import java.io.InputStream;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.Properties; /**
* DBUtil负责得到数据库的连接
* 做成一个工具类(如果是工具类 一般不会实例化new)
* 工具方法 一般会做成静态方法
*/
public class DBUtil {
private static String driver;
private static String url;
private static String username;
private static String pwd;
// static可以写静态的代码块
static{
// 实例化 属性集
Properties p=new Properties();
// 从本类的字节码文件中根据路径得到一个输入流
InputStream is=DBUtil.class.getClassLoader()
.getResourceAsStream("com/tz/util/db.properties");
try {
// 属性集 去加载输入流
p.load(is);
driver=p.getProperty("driver");
url=p.getProperty("url");
username=p.getProperty("username");
pwd=p.getProperty("pwd");
// 记载驱动
Class.forName(driver);
} catch (Exception e) {
e.printStackTrace();
}
} // 封装一个得到 Connection的方法
public static Connection getConn() throws SQLException{
return DriverManager.getConnection(url, username, pwd);
}
// 封装一个关闭连接的方法
public static void closeConn(Connection conn,PreparedStatement ps,ResultSet rs){
if(conn!=null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if(rs!=null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}

com.tz.test 测试包

 package com.tz.test;

 import org.junit.Test;

 import com.tz.dao.StudentDao;
import com.tz.dao.impl.StudentDaoImpl;
import com.tz.entity.Student; public class TestStudentDao {
@Test
public void testadd(){
// 向上造型
StudentDao dao=new StudentDaoImpl();
Student s=new Student(1010,"刘能","男","123","铁岭象牙山");
dao.addStudent(s);
}
@Test
public void testdelete(){
StudentDao dao=new StudentDaoImpl();
int a=dao.deleteStudent(1010);
System.out.println(a);
}
@Test
public void testupdate(){
StudentDao dao=new StudentDaoImpl();
Student s=new Student(1010,"刘德华","男","123","中国香港");
Student st=dao.updateStudent(s);
System.out.println(st);
}
@Test
public void testfindByid(){
StudentDao dao=new StudentDaoImpl();
Student st=dao.findById(1010);
System.out.println(st);
} }

MySQL之JDBC插入、修改、删除封装集于一个方法的更多相关文章

  1. java操作MySQL数据库(插入、删除、修改、查询、获取所有行数)

    插播一段广告哈:我之前共享了两个自己写的小应用,见这篇博客百度地图开发的两个应用源码共享(Android版),没 想到有人找我来做毕设了,年前交付,时间不是很紧,大概了解了下就接下了,主要用到的就是和 ...

  2. MYSQL基础01(新增,修改,删除)

    首先说明一下,本人之前一直都是用MSSQL,由于工作原因,每天写上百条sql语句,并持续了几年;由于换了工作目前主要接触的MYSQL;所以现在开始学习MYSQL. 我的学习计划很简单,我在MSSQL使 ...

  3. mysql DML 数据插入,删除,更新,回退

    mysql插入,删除,更新地址:https://wenku.baidu.com/view/194645eef121dd36a32d82b1.html http://www.cnblogs.com/st ...

  4. Hibernate 插入,修改,删除,查询语句

    /* *具体操作hibernate的类 *增加,删除,修改,按ID查询,模糊查询,查询全部 **/ public class PersonOperate { //在hibernate中所有操作都是由S ...

  5. mysql 数据库 添加查询 修改 删除

    cmd 命令行模式操作数据库 添加查询 修改 删除 ( 表 字段 数据)   一 查看数据库.表.数据字段.数据 1 首先配置环境变量 进入mysql  或者通过一键集成工具 打开mysql命令行   ...

  6. MySQL防止重复插入唯一限制的数据 4种方法

    MySQL防止重复插入唯一限制的数据,下面我们逐一分析 : 1.insert ignore into 当插入数据时,如出现错误时,如重复数据,将不返回错误,只以警告形式返回.所以使用ignore请确保 ...

  7. 解决mysql表不能查询修改删除等操作并出现卡死

    问题现象1:进程wait卡住 测试环境mysql出现了一个怪表:select查询表卡死,alter修改表卡死,甚至我不想要这个表了,delete.truncate.drop表都卡死卡主了...... ...

  8. 图文并解Word插入修改删除批注

    .插入批注 首先选择对象,比如部分文字[hd1] ,之后执行这样的操作:"插入"→"批注":插入的批注处于编辑状态,可以直接输入批注的文字即可;图解如下: .修 ...

  9. jdom 插入 修改 删除

    创建XML文档 XML文件是一种典型的树形文件,每个文档元素都是一个document元素的子节点.而每个子元素都是一个Element对象,对象可以向下包含. 1 因此我们可以通过先创建元素再将元素添加 ...

随机推荐

  1. Ansible-Ad_Hoc临时命令的使用

    Ad_Hoc临时命令的使用 1.使用场景: 所有的临时获取信息的都可以使用,比如节前健康检查.临时更新配置文件. 2.用法: ansible -i 主机 -m 模块 选项 3.常用的命令选项: -v ...

  2. shiro 的session持久化

    对于分布式系统,一般都牵扯到Session共享问题,而想实现Session共享,就要实现Session的持久化操作,即是将内存中的Session持久化至缓存数据库. SessionDAO是Shiro提 ...

  3. MySQL面试 - 读写分离

    MySQL面试 - 读写分离 面试题 你们有没有做 MySQL 读写分离?如何实现 MySQL 的读写分离?MySQL 主从复制原理的是啥?如何解决 MySQL 主从同步的延时问题? 面试官心理分析 ...

  4. laravel框架视图中常用的逻辑结构forlese,foreach,ifelse等

    if 和else @if($name === 1) 这个数字是1 @else 这个数字非1 @endif switch @switch($name) @case(1) 变量name == 1 @bre ...

  5. MySQL容量规划和性能测试

    性能容量关键指标: 每秒tps,峰值tps 基础数据量,日均增长数据量 最大连接数 内存分配 IOPS 重点关注指标: 业务指标: 每秒并发用户请求.每秒订单数.用户请求响应时长 折算成性能指标: q ...

  6. 从C++到Qt(舍弃IDE或qmake、cmake等工具的束缚,尝试通过几个例子)

    Qt 是 C++ 的库,Qt 在 ansi C++ 的基础上进行了一点扩展. 但国内似乎比较浮躁,学Qt的很多连基本的C++如何编译似乎都不太清楚.本文舍弃IDE或qmake.cmake等工具的束缚, ...

  7. Golang高并发抓取HTML图片

    Golang高并发抓取HTML图片 使用准备 1.安装Golang 2.下载爬虫包 go get -v github.com/hunterhug/marmot/util go get -v githu ...

  8. 【转载】使用Jedis操作redis

    Redis是一个开源的Key-Value数据缓存,和Memcached类似. Redis多种类型的value,包括string(字符串).list(链表).set(集合).zset(sorted se ...

  9. Windows下的Android Studio环境搭建、安装使用

    https://jingyan.baidu.com/article/20b68a88ff2ca4796cec6232.html https://blog.csdn.net/jklinux/articl ...

  10. C#使用任务并行库(TPL)

    TPL(Task Parallel Library) 任务并行库 (TPL) 是 System.Threading和 System.Threading.Tasks 命名空间中的一组公共类型和 API. ...