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. idea添加svn项目的两种方法

    1.是直接用svn客户端检出后,在idea直接打开其项目. 2.直接在idea里面拉取svn的项目

  2. TCP/UDP网络编程调试助手下载

    下载地址:可能需要谷歌:软件干净,挺好用的,如果有更好的,欢迎留言! https://www.waveshare.com/wiki/File:TCP-UDP-Debug.7z

  3. LeetCode 278. 第一个错误的版本(First Bad Version)

    278. 第一个错误的版本 LeetCode278. First Bad Version 题目描述 你是产品经理,目前正在带领一个团队开发新的产品.不幸的是,你的产品的最新版本没有通过质量检测.由于每 ...

  4. Cookies和Sessions

    Cookie和Session 为什么会有cookie和session? 由于http协议是无状态的 无法记住用户是谁,cookie主要是在浏览器上记录客户的状态,session主要是用来在服务端记录客 ...

  5. (一)Shiro,久闻其名,而今初相识

    文章目录 shiro简介 功能介绍 从外部看 Shiro 架构 从内部看 Shiro 架构 多说一句,在学习shiro之前,我觉得应该先用 filter ,自己动手写过粗粒度的权限系统,而不要一上来就 ...

  6. QT json数据的应用(cJSON)

    json数据可保存小量的数据在本地的json文件中.QT有两种方式操作:(1).cJSON (2).QT的操作json数据的类. 应用:将监控预案数据保存在本地中. 1.首先根据预案结构创建一个jso ...

  7. Python进阶:metaclass谈

    metaclass 的超越变形特性有什么用? 来看yaml的实例: import yaml class Monster(yaml.YAMLObject): yaml_tag = u'!Monster' ...

  8. AVR单片机教程——序言

    我一直觉得现在的网络环境对电子技术的学习有一点问题,但始终无法确切地指出,更何况网络上相关资源已经那么丰富. 但我觉得是问题的,无论它到底是不是问题,对我来说总归是一个问题.我学习也不算深入,很多东西 ...

  9. 使用Docker发布Asp.Net Core程序到Linux

    CentOS安装Docker 按照docker官方文档来,如果有之前安装过旧版,先卸载旧版,没有的话,可跳过. sudo yum remove docker \ docker-client \ doc ...

  10. IServiceBehavior IContractBehavior IEndpointBehavior IOperationBehavior

    using System; using System.Collections.ObjectModel; using System.Reflection; using System.ServiceMod ...