jdbc_CRUD——增删改查

迷南。 2022-04-05 06:18 409阅读 0赞

这里做一个简单的jdbc_CRUD增删改查

  1. 在pom.xml中先引入依赖包

    <?xml version=”1.0” encoding=”UTF-8”?>


    4.0.0

    cn.mesmile
    jdbcCRUD
    1.0-SNAPSHOT

    jdbcCRUD

    http://www.example.com


    UTF-8
    1.8
    1.8





    junit
    junit
    4.11
    test



    mysql
    mysql-connector-java
    5.1.21




    commons-beanutils
    commons-beanutils
    1.9.2


  2. 在resources文件夹中配置 db.properties文件

    DriverClassName=com.mysql.jdbc.Driver
    url=jdbc:mysql://localhost:3306/mydata
    username=数据库登陆名
    password=数据库登陆密码

  3. domain层

    package cn.mesmile.domain;

    import java.io.PipedReader;

    public class Student {

    1. private Integer id;
    2. private String name;
    3. private Integer age;
    4. private boolean sex;
    5. /*alt+enter alt+insert 调用get和set方法*/
    6. public Integer getId() {
    7. return id;
    8. }
    9. public void setId(Integer id) {
    10. this.id = id;
    11. }
    12. public String getName() {
    13. return name;
    14. }
    15. public void setName(String name) {
    16. this.name = name;
    17. }
    18. public Integer getAge() {
    19. return age;
    20. }
    21. public void setAge(Integer age) {
    22. this.age = age;
    23. }
    24. public boolean isSex() {
    25. return sex;
    26. }
    27. public void setSex(boolean sex) {
    28. this.sex = sex;
    29. }
    30. @Override
    31. public String toString() {
    32. return "Student{" +
    33. "id=" + id +
    34. ", name='" + name + '\'' +
    35. ", age=" + age +
    36. ", sex=" + sex +
    37. '}';
    38. }

    }

3.dao层
3.1新建BaseDao

  1. package cn.mesmile.dao;
  2. import cn.itsource.jdbcUtil.JDBCUtil;
  3. import org.apache.commons.beanutils.BeanUtils;
  4. import sun.java2d.pipe.SpanIterator;
  5. import java.sql.Connection;
  6. import java.sql.PreparedStatement;
  7. import java.sql.ResultSet;
  8. import java.sql.ResultSetMetaData;
  9. import java.util.ArrayList;
  10. import java.util.HashMap;
  11. import java.util.List;
  12. import java.util.Map;
  13. public class BaseDao {
  14. /**
  15. * 针对增删改进行的封装
  16. * @param sql
  17. * @return
  18. * @throws
  19. */
  20. public int executeUpdate(String sql,Object... objs) throws Exception {
  21. //获取连接
  22. Connection conn = JDBCUtil.newInstance().getConnection();
  23. //获取语句执行对象
  24. PreparedStatement pst = conn.prepareStatement(sql);
  25. //设置参数
  26. //SQL可能是有参数也可能是无参数
  27. //设置参数的下标是从1开始,从数组取值的下标从0开始
  28. for (int i = 1; i <= objs.length; i++) {
  29. pst.setObject(i, objs[i-1]);
  30. }
  31. //执行SQL语句
  32. int res = pst.executeUpdate();
  33. //释放资源
  34. JDBCUtil.newInstance().release(null, pst, conn);
  35. return res;
  36. }
  37. /**
  38. * 将查询到的多条数据封装到List集合中
  39. * 任意类型的对象
  40. * @param sql
  41. * @param clz
  42. * @param objs
  43. * @return
  44. * @throws Exception
  45. */
  46. public <T> List<T> executeQueryAll(String sql,Class<T> clz,Object... objs) throws Exception{
  47. Connection conn = JDBCUtil.newInstance().getConnection();
  48. PreparedStatement pst = conn.prepareStatement(sql);
  49. //设置参数
  50. for (int i = 1; i <= objs.length; i++) {
  51. pst.setObject(i, objs[i-1]);
  52. }
  53. ResultSet rs = pst.executeQuery();
  54. //获取结果集的元数据
  55. ResultSetMetaData rsmd = rs.getMetaData();
  56. //获取结果集的列数
  57. int count = rsmd.getColumnCount();
  58. //查询的是多条数据
  59. List<T> list=new ArrayList<>();
  60. //获取结果集中的值
  61. while (rs.next()) {
  62. //每次遍历是一个新的map,创建map
  63. Map<String,Object> map=new HashMap<>();
  64. //字段名和字段的值怎么在map中对应
  65. for (int i = 1; i <=count; i++) {
  66. //字段名
  67. String label = rsmd.getColumnLabel(i);
  68. //该字段下的值
  69. Object value = rs.getObject(label);
  70. //将当前列的数据,添加到map
  71. map.put(label, value);
  72. }
  73. //对象的创建,使用反射
  74. T t = clz.newInstance();
  75. //将数据封装到对象中
  76. BeanUtils.populate(t, map);
  77. //添加到list中去
  78. list.add(t);
  79. }
  80. //释放资源
  81. JDBCUtil.newInstance().release(rs, pst, conn);
  82. return list;
  83. }
  84. /**
  85. * 将查询单个的SQL语句进行一个封装
  86. * @param sql
  87. * @param clz
  88. * @param objs
  89. * @return
  90. * @throws Exception
  91. */
  92. public <T> T executeQuery(String sql,Class<T> clz,Object... objs) throws Exception{
  93. List<T> list = executeQueryAll(sql, clz, objs);
  94. return list.size()==0?null:list.get(0);
  95. }
  96. }

3.2新建实例dao

  1. package cn.mesmile.dao;
  2. import cn.itsource.domain.Student;
  3. import java.util.List;
  4. public interface IStudentDao {
  5. void add(Student student);//添加的方法
  6. void delete(String id);//删除的方法
  7. void edit(Student student);//修改的方法
  8. Student queryOne(String id);//查询一个的方法
  9. List<Student> queryAll();//查询数据库中所有数据的方法
  10. }

3.3新建dao层实现类

  1. package cn.mesmile.dao.impl;
  2. import cn.itsource.dao.BaseDao;
  3. import cn.itsource.dao.IStudentDao;
  4. import cn.itsource.domain.Student;
  5. import cn.itsource.jdbcUtil.JDBCUtil;
  6. import java.sql.Connection;
  7. import java.sql.SQLInput;
  8. import java.util.List;
  9. public class StudentDaoImpl implements IStudentDao {
  10. // 新建工具类对象
  11. static BaseDao dao = new BaseDao();
  12. @Override// 添加
  13. public void add(Student student) {
  14. String sql="insert into student(name,age,sex) values(?,?,?)";
  15. try {
  16. // 调用工具类中的方法
  17. dao.executeUpdate(sql,student.getName(),student.getAge(),student.isSex());
  18. } catch (Exception e) {
  19. e.printStackTrace();
  20. }
  21. }
  22. @Override // 删除
  23. public void delete(String id) {
  24. String sql="delete from student where id=?";
  25. try {
  26. dao.executeUpdate(sql,id);
  27. } catch (Exception e) {
  28. e.printStackTrace();
  29. }
  30. }
  31. @Override //修改
  32. public void edit(Student student) {
  33. String sql="update student set name=?,age=?,sex=? where id=?";
  34. try {
  35. dao.executeUpdate(sql,student.getName(),student.getAge(),student.isSex(),student.getId());
  36. } catch (Exception e) {
  37. e.printStackTrace();
  38. }
  39. }
  40. @Override //查询一个
  41. public Student queryOne(String id) {
  42. String sql="select * from student where id=?";
  43. try {
  44. return dao.executeQuery(sql,Student.class,id );
  45. } catch (Exception e) {
  46. e.printStackTrace();
  47. }
  48. return null;
  49. }
  50. @Override //查询所有
  51. public List<Student> queryAll() {
  52. String sql="select * from student";
  53. try {
  54. return dao.executeQueryAll(sql,Student.class );
  55. } catch (Exception e) {
  56. e.printStackTrace();
  57. }
  58. return null;
  59. }
  60. }
  1. 新建jdbc工具类,用于连接数据库

    package cn.mesmile.jdbcUtil;

    import java.sql.*;
    import java.util.Properties;

    public class JDBCUtil {

    1. private static JDBCUtil instance = null;
    2. private JDBCUtil(){}
    3. private static Properties pro = new Properties();
    4. // 静态代码块,当静态的资源被调用的时候(静态资源包括:构造方法、静态方法),静态代码块就会被调用
    5. static {
    6. instance = new JDBCUtil();
    7. try {
    8. // 加载流对象 通过当前线程对象获得类加载器,再通过类加载器,获得流对象
    9. pro.load(Thread.currentThread().getContextClassLoader().getResourceAsStream("db.properties"));
    10. //加载注册驱动
    11. Class.forName(pro.getProperty("DriverClassName"));
    12. } catch (Exception e) {
    13. e.printStackTrace();
    14. }
    15. }
    16. /**
    17. * @return 返回的对象是JDBC工具类的对象
    18. */
    19. public static JDBCUtil newInstance(){
    20. return instance;
    21. }
    22. /**
    23. * 此方法用于,获得一个Connection连接对象
    24. * @return
    25. */
    26. public Connection getConnection() {
    27. try {
    28. // 获得Connection对象
    29. return DriverManager.getConnection(pro.getProperty("url"), pro.getProperty("username"), pro.getProperty("password"));
    30. } catch (SQLException e) {
    31. e.printStackTrace();
    32. }
    33. return null;
    34. }
    35. /**
    36. * 这是一个方便减少冗余度的方法,主要用于 关闭几种流资源连接
    37. *
    38. * @param resultSet :这是一个ResultSet类型的对象
    39. * @param statement :这是一个Statement类型的对象
    40. * @param conn :这是一个Connection类型的对象
    41. */
    42. public void release(ResultSet resultSet,Statement statement,Connection conn){
    43. //先判断是否为空,若不为空才 进行关闭流 (先打开,后关闭)
    44. try {
    45. if(resultSet != null)resultSet.close();
    46. } catch (SQLException e1) {
    47. e1.printStackTrace();
    48. }finally{
    49. if(statement != null)
    50. try {
    51. statement.close();
    52. } catch (SQLException e) {
    53. e.printStackTrace();
    54. }finally{
    55. if(conn != null)
    56. try {
    57. conn.close();
    58. } catch (SQLException e) {
    59. e.printStackTrace();
    60. }
    61. }
    62. }
    63. }

    }

  2. 测试

    package cn.mesmile;

    import static org.junit.Assert.assertTrue;

    import cn.itsource.dao.impl.StudentDaoImpl;
    import cn.itsource.domain.Student;
    import org.junit.Test;

    import java.util.List;

    /**

    • Unit test for simple App.
      /
      public class AppTest {
      /*

      • Rigorous Test :-)
        */
        static StudentDaoImpl studentDao = new StudentDaoImpl();
        @Test
        public void addTest() {
        // 添加
        Student student = new Student();
        student.setName(“管理员”);
        student.setAge(18);
        student.setSex(false);
        studentDao.add(student);
        }
        @Test
        public void delteTest() {
        // 删除
        studentDao.delete(“1”);
        }

        @Test
        public void updateTest(){
        // 修改
        Student student = new Student();
        student.setName(“李四”);
        student.setSex(false);
        student.setAge(19);
        student.setId(1);
        studentDao.edit(student);
        }

        @Test // 通过id查询一个
        public void queryOneTest(){
        Student student = studentDao.queryOne(“2”);
        System.out.println(student);
        }

        @Test // 查询所有的
        public void queryAllTest(){
        List students = studentDao.queryAll();
        System.out.println(students);
        }
        }

测试【查询所有】数据的结果:
在这里插入图片描述

发表评论

表情:
评论列表 (有 0 条评论,409人围观)

还没有评论,来说两句吧...

相关阅读

    相关 MySQL 增删

    MySQL 增删改查 虽然经常对数据库进行操作,但有时候一些sql语句还是会忘记,因此总结一下,方便记忆。 一 对库操作 1 创建数据库 > create dat