• JDBC 访问数据库


    一、实验目的

    理解 JDBC 的工作原理,掌握 JDBC 访问数据库; 掌握常见数据库 MYSQL ;

    二、实验要求

    1. 理解 JDBC 的应用。
    2. 掌握 JDBC 的编程接口。
    3. 熟练使用 MYEclipse 开发简单应用

    三、实验内容

    现在使用 JDBC 写一个简单的小程序,主要是使用 JDBC 连接 MySQL 数据库,然后对数据库进行一些基本的增删改查操作。

    1、设计数据库表

    先设计一个数据库表,用于保存用户信息,建表语句如下:

    CREATE TABLE `tbl_user_info` (
      `id` int(11) NOT NULL AUTO_INCREMENT,
      `user_name` varchar(20) NOT NULL,
      `age` int(11) NOT NULL,
      `sex` int(1) NOT NULL,
      `create_dt` date NOT NULL,
      PRIMARY KEY (`id`)
    ) ENGINE=InnoDB AUTO_INCREMENT=61 DEFAULT CHARSET=utf8;
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8

    在用户表中定义了几个字段,分别是 id,user_name,age,sex,create_dt,其中 id 是主键, 是自增长的,user_name 表示用户名,age 表示用户年龄,sex 表示用户的性别,这里的性别用数字表示,0 表示女性,1 表示男性,create_dt 表示创建的时间。预先在数据库中插入几条数据,数据如下:
    在这里插入图片描述

    2、定义实体类

    定义一个 Bean,与数据库表中的各个字段对应:
    UserVO.java

    package com.imooc.jdbc;
    
    import java.util.Date;
    
    public class UserVO {
        private int id;
        private String userName;
        private int age;
        private int sex;
        private Date createDt;
    
        public int getId() {
            return id;
        }
    
        public void setId(int id) {
            this.id = id;
        }
    
        public String getUserName() {
            return userName;
        }
    
        public void setUserName(String userName) {
            this.userName = userName;
        }
    
        public int getAge() {
            return age;
        }
    
        public void setAge(int age) {
            this.age = age;
        }
    
        public int getSex() {
            return sex;
        }
    
        public void setSex(int sex) {
            this.sex = sex;
        }
    
        public Date getCreateDt() {
            return createDt;
        }
    
        public void setCreateDt(Date createDt) {
            this.createDt = createDt;
        }
    
        @Override
        public String toString() {
            return "UserVO [id=" + id + ", userName=" + userName + ", age=" + age
                    + ", sex=" + sex + ", createDt=" + createDt + "]";
        }
     public UserVO() {
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60

    3、定义数据库连接类

    定义一个数据库连接类,用于获取 MySQL 的连接。MySQL 的 JDBC URL 编写方式为:jdbc:mysql://主机名称:连接端口/数据库的名称?参数= 值,在这个例子中我连接的数据库主机是一台远程主机,所以主机名称为远程主机的 ip 地址,如果数据库主机为本机,则可以定义为 localhost,在参数中指定用户名为 root,密码也是 root,为了避免中文乱码要指定 useUnicode 和 characterEncoding。因为连接的是 MySQL 数据库,所以程序一开始需要加载 MySQL 的数据库驱动,然后通过 DriverManager.getConn ection(String URL)方法获取数据库的连接。
    DBUtil .java

    package com.imooc.jdbc;
    
    import java.sql.Connection;
    import java.sql.DriverManager;
    
    public class DBUtil {
    
        private static final String URI = "jdbc:mysql://192.168.2.207:3306/equipmenitsystem?"
                + "user=root&password=123456&useUnicode=true&characterEncoding=UTF-8";
    
        private static final String DRIVER = "com.mysql.jdbc.Driver";
    
        public static Connection connectDB() throws Exception {
            //1、加载数据库驱动
            Class.forName(DRIVER);
            //2、获取数据库连接
            Connection conn = DriverManager.getConnection(URI);
    
            return conn;
        }
    
    }
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22

    4、实现数据库的增删改查

    在获取了数据库的连接之后,就可以操作数据库了,下面分别实现数据库的增删改查操作, 定义一个 UserDaoIab 类用于操作数据库。

    package com.gec.dao;
    
    import com.gec.com.gec.util.DBUtil;
    import com.gec.entity.UserVO;
    
    import java.sql.*;
    import java.util.ArrayList;
    import java.util.List;
    import java.util.Map;
    
    public class UserDaoIab {
    
        //查询数据库所有信息
        public List<UserVO> queryAll() throws Exception {
            Connection conn = DBUtil.connectDB();
            String sql = "SELECT * FROM tbl_user_info";
            List<UserVO> userList = new ArrayList<UserVO>();
    
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql);
            System.out.println("数据库中全部用户信息如下:");
            while (rs.next()) {
                UserVO user = new UserVO();
                user.setId(rs.getInt("id"));
                user.setUserName(rs.getString("user_name"));
                user.setAge(rs.getInt("age"));
                user.setSex(rs.getInt("sex"));
                user.setCreateDt(rs.getDate("create_dt"));
    
                userList.add(user);
            }
    
            return userList;
        }
    
        //查询数据库用户特定条件信息
        public List<UserVO> queryByParams(List<Map<String, Object>> params) throws Exception {
            Connection conn = DBUtil.connectDB();
            StringBuilder sql = new StringBuilder("SELECT * FROM tbl_user_info WHERE  1 =  1 ");
    
            for (Map<String, Object> param : params) {
                sql.append(" and ");
                sql.append(" " + param.get("col") + " ");
                sql.append(" " + param.get("rel") + " ");
                sql.append(" " + param.get("value") + " ");
            }
            System.out.println(sql.toString());
    
            List<UserVO> userList = new ArrayList<UserVO>();
    
            Statement stmt = conn.createStatement();
            ResultSet rs = stmt.executeQuery(sql.toString());
            while (rs.next()) {
                UserVO user = new UserVO();
                user.setId(rs.getInt("id"));
                user.setUserName(rs.getString("user_name"));
                user.setAge(rs.getInt("age"));
                user.setSex(rs.getInt("sex"));
                user.setCreateDt(rs.getDate("create_dt"));
    
                userList.add(user);
            }
            System.out.println("搜索用户信息数据成功!!!");
            return userList;
        }
    
        //在数据库中新增一条用户信息
        public void addUser(UserVO user) throws Exception {
            Connection conn = DBUtil.connectDB();
            String sql = "INSERT INTO tbl_user_info(user_name, age, sex, create_dt) "
                    + " VALUES(?, ?, ?, ?)";
    
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, user.getUserName());
            pstmt.setInt(2, user.getAge());
            pstmt.setInt(3, user.getSex());
            pstmt.setDate(4, new Date(new java.util.Date().getTime()));
    
            pstmt.execute();
            System.out.println("添加用户信息数据成功!!!");
        }
    
        //在数据库中根据用户的id来删除用户数据
        public void deleteUser(int id) throws Exception {
            Connection conn = DBUtil.connectDB();
            String sql = "DELETE FROM tbl_user_info WHERE id = ?";
    
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, id);
    
            pstmt.execute();
            System.out.println("删除用户信息数据成功!!!");
        }
    
        //在数据库中根据用户的id来更新用户信息
        public void updateUser(UserVO user) throws Exception {
            Connection conn = DBUtil.connectDB();
            String sql = "UPDATE tbl_user_info SET user_name=?, age=?, sex=?"
                    + " WHERE id=?";
    
            PreparedStatement pstmt = conn.prepareStatement(sql);
            pstmt.setString(1, user.getUserName());
            pstmt.setInt(2, user.getAge());
            pstmt.setInt(3, user.getSex());
            pstmt.setInt(4, user.getId());
            System.out.println("更新用户信息数据成功!!!");
            pstmt.executeUpdate();
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94
    • 95
    • 96
    • 97
    • 98
    • 99
    • 100
    • 101
    • 102
    • 103
    • 104
    • 105
    • 106
    • 107
    • 108
    • 109
    • 110

    5、测试用例

    Uservotest.class

    package com.gec.test;
    
    import com.gec.dao.UserDao;
    import com.gec.dao.UserDaoIab;
    import com.gec.entity.UserVO;
    
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    public class uservotest {
        //数据库所有信息查询
    /*    public static void main(String[] args) {
            UserDaoIab dao = new UserDaoIab();
    
            try {
                List userList = dao.queryAll();
                for (UserVO user : userList) {
                    System.out.println(user);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
        }*/
        //查询数据库特定条件信息
    /*    public static void main(String[] args) {
            UserDaoIab dao = new UserDaoIab();
    
            List> params = new ArrayList>();
            Map param1 = new HashMap();
            param1.put("col", "user_name");
            param1.put("rel", "like");
            param1.put("value", "'%John%'");
            params.add(param1);
    
            Map param2 = new HashMap();
            param2.put("col", "sex");
            param2.put("rel", "=");
            param2.put("value", 1);
            params.add(param2);
            try {
                List userList = dao.queryByParams(params);
                for (UserVO user : userList) {
                    System.out.println(user);
                }
            } catch (Exception e) {
                e.printStackTrace();
            }
    
        }*/
        //在数据库中新增一条信息
    /*    public static void main(String[] args) {
            UserDaoIab dao = new UserDaoIab();
            UserVO user = new UserVO();
    
            user.setUserName("animal");
            user.setAge(85);
            user.setSex(0);
            try {
                dao.addUser(user);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }*/
        //在数据库中根据用户的id来删除数据
     /*   public static void main(String[] args) {
            UserDaoIab dao = new UserDaoIab();
    
            try {
                dao.deleteUser(4);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }*/
        //在数据库中根据用户的id来更新数据
    /*    public static void main(String[] args) {
            UserDaoIab dao = new UserDaoIab();
            UserVO user = new UserVO();
    
            user.setUserName("张弛华");
            user.setAge(99);
            user.setSex(0);
            user.setId(1);
    
            try {
                dao.updateUser(user);
            } catch (Exception e) {
                e.printStackTrace();
            }
        }*/
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19
    • 20
    • 21
    • 22
    • 23
    • 24
    • 25
    • 26
    • 27
    • 28
    • 29
    • 30
    • 31
    • 32
    • 33
    • 34
    • 35
    • 36
    • 37
    • 38
    • 39
    • 40
    • 41
    • 42
    • 43
    • 44
    • 45
    • 46
    • 47
    • 48
    • 49
    • 50
    • 51
    • 52
    • 53
    • 54
    • 55
    • 56
    • 57
    • 58
    • 59
    • 60
    • 61
    • 62
    • 63
    • 64
    • 65
    • 66
    • 67
    • 68
    • 69
    • 70
    • 71
    • 72
    • 73
    • 74
    • 75
    • 76
    • 77
    • 78
    • 79
    • 80
    • 81
    • 82
    • 83
    • 84
    • 85
    • 86
    • 87
    • 88
    • 89
    • 90
    • 91
    • 92
    • 93
    • 94

    运行结果:
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述
    在这里插入图片描述

  • 相关阅读:
    SpringBoot使用RedisTemplate
    Python 编码规范 笔记
    Python爬虫——BS4解析方式简介
    https攻击怎么防御
    Nacos注册中心
    TensorFlow和Pytorch两种机器学习框架的比较及优缺点
    记误删Linux的python与yum
    有关flask和装饰器的python学习
    Android Studio开发入门教程:如何让开发的app国际化?
    MySQL 主从复制与读写分离
  • 原文地址:https://blog.csdn.net/qq_58251465/article/details/128147968