1、 先建四个包

  ① com.tz.entity 实体包

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

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

  ③ com.tz.util 工具类包

  ④ com.tz.test 测试包

com.tz.entity 实体包

  新建 Student 实体类

  1. package com.tz.entity;
  2.  
  3. public class Student{
  4. private int id;
  5. private String name;
  6. private String sex;
  7. private String pwd;
  8. private String address;
  9. public Student() {
  10. }
  11. public Student(int id, String name, String sex, String pwd, String address) {
  12. this.id = id;
  13. this.name = name;
  14. this.sex = sex;
  15. this.pwd = pwd;
  16. this.address = address;
  17. }
  18. public int getId() {
  19. return id;
  20. }
  21. public void setId(int id) {
  22. this.id = id;
  23. }
  24. public String getName() {
  25. return name;
  26. }
  27. public void setName(String name) {
  28. this.name = name;
  29. }
  30. public String getSex() {
  31. return sex;
  32. }
  33. public void setSex(String sex) {
  34. this.sex = sex;
  35. }
  36. public String getPwd() {
  37. return pwd;
  38. }
  39. public void setPwd(String pwd) {
  40. this.pwd = pwd;
  41. }
  42. public String getAddress() {
  43. return address;
  44. }
  45. public void setAddress(String address) {
  46. this.address = address;
  47. }
    //
  48. public String toString() {
  49. return "Student [id=" + id + ", name=" + name + ", sex=" + sex
  50. + ", pwd=" + pwd + ", address=" + address + "]";
  51. }
  52.  
  53. }

com.tz.dao 数据访问层包

  新建StudentDao 接口

  1. package com.tz.dao;
  2.  
  3. import com.tz.entity.Student;
  4.  
  5. /**
  6. * 规范 方法名
  7. * 方法有几个,要做哪些方法
  8. */
  9. public interface StudentDao {
  10. // 增加一个学生
  11. void addStudent(Student s);
  12. // 删除一个学生
  13. int deleteStudent(int id);
  14. // 修改一个学生
  15. Student updateStudent(Student s);
  16. // 查询学生
  17. Student findById(int id);
  18. }

   新建BaseDao 类

  1. package com.tz.dao;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6.  
  7. import com.tz.util.DBUtil;
  8.  
  9. /**
  10. * 做所有dao的父类,封装他们基本的增删改操作,
  11. * 因为所有的Dao的增删改操作都一样。
  12. * 只是换了 不同的 sql语句和传入的参数。
  13. */
  14. public class BaseDao {
  15. private Connection conn;
  16. private PreparedStatement ps;
  17. private ResultSet rs;
  18. /**
  19. * 封装 任何增删改
  20. * sql 传入方法的Sql语句
  21. * Object[] Sql语句里面的参数,因为参数的类型不同 所以Object
  22. */
  23. public int toUpdate(String sql,Object[] obs){
  24. int a=0;
  25. try {
  26. conn=DBUtil.getConn();
  27. ps=conn.prepareStatement(sql);
  28. // 循环 赋值参数
  29. if(obs!=null&&obs.length>0){
  30. for(int i=0;i<obs.length;i++){
  31. ps.setObject(i+1, obs[i]);
  32. }
  33. }
  34. a=ps.executeUpdate();
  35. return a;
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. }finally{
  39. DBUtil.closeConn(conn, ps, rs);
  40. }
  41. return a;
  42. }
  43. }

com.tz.dao 数据访问层

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

    新建StudentDaoImpl 类

  1. package com.tz.dao.impl;
  2.  
  3. import java.sql.Connection;
  4. import java.sql.PreparedStatement;
  5. import java.sql.ResultSet;
  6. import java.sql.SQLException;
  7.  
  8. import com.tz.dao.BaseDao;
  9. import com.tz.dao.StudentDao;
  10. import com.tz.entity.Student;
  11. import com.tz.util.DBUtil;
  12. /**
  13. * StudentDao的实现
  14. * Java是单继承的 只能继承一个父类
  15. * 但是可以实现多个接口
  16. * 写 先继承后实现
  17. */
  18. public class StudentDaoImpl extends BaseDao implements StudentDao{
  19. // 连接组件
  20. private Connection conn;
  21. // 得到预编译的发送Sql语句的组件
  22. private PreparedStatement ps;
  23. // 处理结果集的组件
  24. private ResultSet rs;
  25. public void addStudent(Student s) {
  26. String sql="insert into student(sid,sname,pwd,sex,address) values(?,?,?,?,?)";
  27. Object[] obs={s.getId(),s.getName(),s.getPwd(),s.getSex(),s.getAddress()};
  28. toUpdate(sql, obs);
  29. }
  30.  
  31. public int deleteStudent(int id) {
  32. String sql="delete from student where sid=?";
  33. Object[] obs={id};
  34. int a=toUpdate(sql, obs);
  35. return a;
  36. }
  37.  
  38. public Student updateStudent(Student s) {
  39. String sql="update student set sname=?,pwd=?,sex=?,address=? where sid=?";
  40. Object[] obs={s.getName(),s.getPwd(),s.getSex(),s.getAddress(),s.getId()};
  41. toUpdate(sql, obs);
  42. Student student=findById(s.getId());
  43. return student;
  44. }
  45.  
  46. public Student findById(int id) {
  47. Student s=new Student();
  48. try {
  49. conn=DBUtil.getConn();
  50. String sql="select * from student where sid=?";
  51. ps=conn.prepareStatement(sql);
  52. ps.setObject(1, id);
  53. // 会返回一个int值 表示 你影响了 几行数据
  54. rs=ps.executeQuery();
  55. while(rs.next()){
  56. s.setId(rs.getInt("sid"));
  57. s.setName(rs.getString("sname"));
  58. s.setPwd(rs.getString("pwd"));
  59. s.setAddress(rs.getString("address"));
  60. s.setSex(rs.getString("sex"));
  61. }
  62. return s;
  63. } catch (SQLException e) {
  64. e.printStackTrace();
  65. }finally{
  66. DBUtil.closeConn(conn, ps, rs);
  67. }
  68. return s;
  69. }
  70.  
  71. }

 com.tz.util 工具类包

  新建 db.properties 配置文件

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

  新建 DBUtil.java 类

  1. package com.tz.util;
  2.  
  3. import java.io.InputStream;
  4. import java.sql.Connection;
  5. import java.sql.DriverManager;
  6. import java.sql.PreparedStatement;
  7. import java.sql.ResultSet;
  8. import java.sql.SQLException;
  9. import java.util.Properties;
  10.  
  11. /**
  12. * DBUtil负责得到数据库的连接
  13. * 做成一个工具类(如果是工具类 一般不会实例化new)
  14. * 工具方法 一般会做成静态方法
  15. */
  16. public class DBUtil {
  17. private static String driver;
  18. private static String url;
  19. private static String username;
  20. private static String pwd;
  21. // static可以写静态的代码块
  22. static{
  23. // 实例化 属性集
  24. Properties p=new Properties();
  25. // 从本类的字节码文件中根据路径得到一个输入流
  26. InputStream is=DBUtil.class.getClassLoader()
  27. .getResourceAsStream("com/tz/util/db.properties");
  28. try {
  29. // 属性集 去加载输入流
  30. p.load(is);
  31. driver=p.getProperty("driver");
  32. url=p.getProperty("url");
  33. username=p.getProperty("username");
  34. pwd=p.getProperty("pwd");
  35. // 记载驱动
  36. Class.forName(driver);
  37. } catch (Exception e) {
  38. e.printStackTrace();
  39. }
  40. }
  41.  
  42. // 封装一个得到 Connection的方法
  43. public static Connection getConn() throws SQLException{
  44. return DriverManager.getConnection(url, username, pwd);
  45. }
  46. // 封装一个关闭连接的方法
  47. public static void closeConn(Connection conn,PreparedStatement ps,ResultSet rs){
  48. if(conn!=null){
  49. try {
  50. conn.close();
  51. } catch (SQLException e) {
  52. e.printStackTrace();
  53. }
  54. }
  55. if(ps!=null){
  56. try {
  57. ps.close();
  58. } catch (SQLException e) {
  59. e.printStackTrace();
  60. }
  61. }
  62. if(rs!=null){
  63. try {
  64. rs.close();
  65. } catch (SQLException e) {
  66. e.printStackTrace();
  67. }
  68. }
  69. }
  70. }

com.tz.test 测试包

  1. package com.tz.test;
  2.  
  3. import org.junit.Test;
  4.  
  5. import com.tz.dao.StudentDao;
  6. import com.tz.dao.impl.StudentDaoImpl;
  7. import com.tz.entity.Student;
  8.  
  9. public class TestStudentDao {
  10. @Test
  11. public void testadd(){
  12. // 向上造型
  13. StudentDao dao=new StudentDaoImpl();
  14. Student s=new Student(1010,"刘能","男","123","铁岭象牙山");
  15. dao.addStudent(s);
  16. }
  17. @Test
  18. public void testdelete(){
  19. StudentDao dao=new StudentDaoImpl();
  20. int a=dao.deleteStudent(1010);
  21. System.out.println(a);
  22. }
  23. @Test
  24. public void testupdate(){
  25. StudentDao dao=new StudentDaoImpl();
  26. Student s=new Student(1010,"刘德华","男","123","中国香港");
  27. Student st=dao.updateStudent(s);
  28. System.out.println(st);
  29. }
  30. @Test
  31. public void testfindByid(){
  32. StudentDao dao=new StudentDaoImpl();
  33. Student st=dao.findById(1010);
  34. System.out.println(st);
  35. }
  36.  
  37. }

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. Java网络编程探究|乐字节

    大家好,我是乐字节小乐,上次给大家讲述了Java中的IO流之输出流|乐字节,本文将会给大家讲述网络编程. 主要内容如下: 网络 网络分层 IP位置 端口port 网络编程 一. 网络 1.概念 网络即 ...

  2. Deepin安装前分区总结

    linux的分区的概念应该这么理解,为某个目录创建/挂载分区,比如为/home创建/挂载到某个分区上: 1.需要/boot分区,1.5G: 2./分区,100G:[会自动创建其他目录如/srv,/ro ...

  3. [转帖]上云测试,这些关键点你get 到没有

    上云测试,这些关键点你get 到没有 https://www.cnblogs.com/mypm/p/10852656.html?tdsourcetag=s_pcqq_aiomsg sticky 还有s ...

  4. 虚拟环境搭建Django项目

    下载虚拟环境包 pip install virtualenv 创建虚拟环境 virtualenv   env 进入env文件夹 cd env 进入Scripts文件夹 cd Scripts 启动虚拟环 ...

  5. WUSTOJ 1336: Lucky Boy(Java)博弈

    题目链接:1336: Lucky Boy 参考博客:LUCKY BOY 博弈--HandsomeHow Description Recently, Lur have a good luck. He i ...

  6. PAT甲级题分类汇编——计算

    本文为PAT甲级分类汇编系列文章. 计算类,指以数学运算为主或为背景的题. 题号 标题 分数 大意 1058 A+B in Hogwarts 20 特殊进制加法 1059 Prime Factors ...

  7. Spring常用jar包功能详解

    很多小伙伴包括我自己,在使用spring的时候导入了一堆jar包,但是并不明白每个jar的用途,使用spring的不同功能时也不知该导入哪个jar包,今天记录一下spring各个jar包的含义,供大家 ...

  8. lock的等效代码

    1.lock的等效代码 在.NET的多线程程序中,经常会遇到lock关键字来控制同步,比如下列代码: private object o = new object(); public void Work ...

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

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

  10. C#用户控件实战01_CSS布局

    很多应用系统的主页布局,一般采用如下案例所示布局较多,如下图的CSS布局框架,上.中.下,接下来我们演示,在C#中实现如下的业务架构布局. 代码范例: 在<body></body&g ...