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. Python基础--软件Anaconda的下载与安装

    1.Anaconda软件的优点: Anaconda指的是一个开源的Python发行版本开发平台,在进行Python开发上方便简洁,有利于初步学习和实践深度学习. 2.Anaconda软件的下载: An ...

  2. MapReduce示例式理解

    从word count这个实例理解MapReduce. MapReduce大体上分为六个步骤:input, split, map, shuffle, reduce, output.细节描述如下: 1. ...

  3. JUC之原子类

    在分析原子类之前,先来了解CAS操作 CAS CAS,compare and swap的缩写,中文翻译成比较并交换. CAS 操作包含三个操作数 —— 内存位置(V).预期原值(A)和新值(B).如果 ...

  4. Mybatis笔记1

    Mybatis 持久层框架,数据访问层 mybatis是一个优秀的基于java的持久层框架,它内部封装了jdbc,使开发者只需要关注sql语句本身,而不需要花费精力去处理加载驱动,创建连接,创建sta ...

  5. Django项目配置参数大全

    数据库的配置 配置文件: settings.pyDATABASES = { # 'default': { # 'ENGINE': 'django.db.backends.sqlite3', # 'NA ...

  6. PAT(B) 1044 火星数字(Java)进制转换

    题目链接:1044 火星数字 (20 point(s)) 题目描述 火星人是以 13 进制计数的: 地球人的 0 被火星人称为 tret. 地球人数字 1 到 12 的火星文分别为:jan, feb, ...

  7. WUSTOJ 1337: Car race game(C)树状数组,离散化

    题目链接:1337: Car race game 参考资料:⑴ Car race game 树状数组 棋煜,⑵ 树状数组,⑶ 离散化 补充资料:⑴ qsort,⑵ 二分查找 Description B ...

  8. C++中深拷贝与浅拷贝

    浅拷贝和深拷贝 在某些状况下,类内成员变量需要动态开辟堆内存,如果实行位拷贝,也就是把对象里的值完全复制给另一个对象,如A=B.这时,如果B中有一个成员变量指针已经申请了内存,那A中的那个成员变量也指 ...

  9. on duplicate key mysql插入更新

    insert into `test` (`job_id`, `user_name`, `total_time`) values ('12345', 'zhangsan', '10') on dupli ...

  10. 用Onenote写博客日志 

    进入OneNote,选中要发布博客的分区,然后点击菜单栏中的[文件]->[发送]->[发送至博客]         这时候会启动word程序弹出下面的对话框(如果你从未设置过),点击[立即 ...