(Java高级程序设计-案例)-通过JDBC连接MySQL并对表进行增、删、改、查

Java高级程序设计第八章的练习

通过一个案例去了解使用JDBC连接到MySQL,并且对数据库中的User表进行增删改查

目录

1、创建一个案例使用的数据库和表

2、创建用于MySQL的数据库工具类DBUtil

3、通过JDBC删除User表中的数据

4、通过JDBC对User表进行增加数据

5、通过JDBC对User表的数据进行修改

6、通过JDBC查询User表的全部数据

7、通过JDBC查询User表的单个数据


1、创建一个案例使用的数据库和表

-- 创建数据库
create database emp;

-- 使用数据库
use emp;

-- 创建表
CREATE TABLE `user`  (
  `id` int(0) NOT NULL AUTO_INCREMENT,
  `user` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `pwd` varchar(32) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `nickname` varchar(20) CHARACTER SET utf8mb4 COLLATE utf8mb4_general_ci NULL DEFAULT NULL,
  `age` int(0) NULL DEFAULT NULL,
  PRIMARY KEY (`id`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8mb4 COLLATE = utf8mb4_general_ci ROW_FORMAT = Dynamic;

-- 插入数据
INSERT INTO `user` VALUES (1, '123', '1111', 'wangxiaohu', 18);
INSERT INTO `user` VALUES (2, '111', '123123', 'chenxiao', 20);
INSERT INTO `user` VALUES (3, '222', '123456', 'chenwang', 22);
INSERT INTO `user` VALUES (4, '333', '123123', 'zhangsan', 23);
INSERT INTO `user` VALUES (5, '444', '123456', 'wangzhai', 19);
INSERT INTO `user` VALUES (6, '555', '111', 'lisi', 16);

2、创建用于MySQL的数据库工具类DBUtil

工具类DBUtil用于连接MySQL

import java.sql.*;

///DBUtil叫做数据库工具类(用于连接MySQL)
public class DBUtil {
    //1、连接配置项
    public static final String DriverName = "com.mysql.cj.jdbc.Driver"; //固定路径(lib目录下的jar包)
    public static final String URL = "jdbc:mysql://localhost:3306/emp?characterEncoding=utf-8"; //连接数据库emp
    public static final String USER = "root"; //用户名
    public static final String PWD = "123456"; //密码

    //2、加载数据库驱动
    static {
        try {
            Class.forName(DriverName);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        }
    }

    //3、连接方法
    public static Connection getConn() {
        Connection conn = null;
        try {
            conn = DriverManager.getConnection(URL, USER, PWD);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return conn;
    }

    //4、关闭
    public static void close(Connection conn, PreparedStatement ps, ResultSet rs) {
        try {
            if (conn != null) {
                conn.close();
            }
            if (ps != null) {
                ps.close();
            }
            if (rs != null) {
                rs.close(); //关闭连接
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
    
    //5、使用
    public static void main(String[] args) {
        System.out.println(DBUtil.getConn());
        //运行如果输出的是一行字符串,就表示连接数据库成功
        //连接数据库失败则报红
    }
}

 

3、通过JDBC删除User表中的数据

类的命名为:对要操作的表 + DAO进行命名

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

//数据库的表面+DAO命名该类(固定格式)
public class UserDAO_del {
    //1、实现对用户的删除
    public static boolean del(int id){//通过主键id进行删除某一条数据
        //1、连接数据库
        Connection conn = DBUtil.getConn();
        //2、编写SQL语句
        String sql = "delete from user where id=?";
        try {
            //3、预编译SQL
            PreparedStatement ps = conn.prepareStatement(sql);
            //4、设置SQL参数
            ps.setObject(1,id);
            //5、执行SQL
            boolean result = ps.executeUpdate() > 0; //它返回的是个影响行数
            //6、关闭数据库
            DBUtil.close(conn,ps,null);
            //7、返回结果
            return result;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        //这里做一个预防万一没有执行try时,返回false
        return false;
    }
    //调用上面的del删除方法
    public static void main(String[] args) {
        //执行删除的方法del
        System.out.println(UserDAO_del.del(4)?"删除成功":"删除失败");
    }

}

(对表的操作应该统一集中在一个类(UserDAO)中,但是因为案例拆分多个类来实现)

4、通过JDBC对User表进行增加数据

在对User表进行增的操作时,需要先创建一个User的模型类(对User中的字段进行一个get和set的处理)

//模型类(一张表对应一个模型类,类的名字就是表名) =》 数据的载体
public class User {
    //字段名
    private int id;
    private String user;
    private String pwd;
    private String nickname;
    private int age;

    //生成get和set方法


    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getUser() {
        return user;
    }

    public void setUser(String user) {
        this.user = user;
    }

    public String getPwd() {
        return pwd;
    }

    public void setPwd(String pwd) {
        this.pwd = pwd;
    }

    public String getNickname() {
        return nickname;
    }

    public void setNickname(String nickname) {
        this.nickname = nickname;
    }

    public int getAge() {
        return age;
    }

    public void setAge(int age) {
        this.age = age;
    }
}

再创建一个类来对User表实现增加add的操作

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class UserDAO_add {
    //1、新增用户数据(新增、删除、修改逻辑是一样的)
    public static boolean add(User u){
        //1、连接数据库
        Connection conn = DBUtil.getConn();
        //2、编写SQL语句
        String sql = "insert into user values(?,?,?,?,?)"; //需要传递的参数用?代替,理解为:参数占位符
        try {
            //3、预编译SQL
            PreparedStatement ps = conn.prepareStatement(sql);
            //4、设置SQL参数
            ps.setObject(1,null); //用户id
            ps.setObject(2,u.getUser());
            ps.setObject(3,u.getPwd());
            ps.setObject(4,u.getNickname());
            ps.setObject(5,u.getAge());
            //5、执行SQL
            boolean result = ps.executeUpdate() > 0; //它返回的是个影响行数
            //6、关闭数据库
            DBUtil.close(conn,ps,null);
            //7、返回结果
            return result;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        //这里做一个预防万一没有执行try时,返回false
        return false;
    }

    public static void main(String[] args) {
//        调用增加方法add
        User u = new User();
        u.setAge(20);
        u.setUser("User");
        u.setPwd("Password");
        u.setNickname("草上飞");
        System.out.println(UserDAO_add.add(u) ?"添加成功":"添加失败");
    }

}

5、通过JDBC对User表的数据进行修改

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class UserDAO_up {
    //1、对用户的数据进行修改
    public static boolean update(User u){
        //1、连接数据库
        Connection conn = DBUtil.getConn();
        //2、编写SQL语句
        String sql = "update user set user=?,pwd=?,nickname=?,age=? where id=?";
        try {
            //3、预编译SQL
            PreparedStatement ps = conn.prepareStatement(sql);
            //4、设置SQL参数
            ps.setObject(1,u.getUser());
            ps.setObject(2,u.getPwd());
            ps.setObject(3,u.getNickname());
            ps.setObject(4,u.getAge());
            ps.setObject(5,u.getId()); //用户id
            //5、执行SQL
            boolean result = ps.executeUpdate() > 0; //它返回的是个影响行数
            //6、关闭数据库
            DBUtil.close(conn,ps,null);
            //7、返回结果
            return result;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        //这里做一个预防万一没有执行try时,返回false
        return false;
    }

    public static void main(String[] args) {
//        调用增加方法add
        User u = new User();
        u.setId(8); //修改的是ID=8的用户
        u.setAge(21);
        u.setUser("用户名");
        u.setPwd("密码");
        u.setNickname("地上滚");
        System.out.println(UserDAO_up.update(u) ?"修改成功":"修改失败");
    }

}

6、通过JDBC查询User表的全部数据

对表的查询与对表的增删改是不一样的,需要单独的编写

import java.sql.*;
import java.util.ArrayList;

public class UserDAO_seAll {
    //查询跟增删改是不一样的,需要单独的额外书写
    //查询User表中的全部数据
    public static ArrayList<User> select(){
        //1、写SQL的查询语句
        String sql = "select * from user";
        //2、连接数据库
        Connection conn = DBUtil.getConn();
        //3、预编译
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            //4、执行查询
            ResultSet rs = ps.executeQuery(); //这里得到的是结果集
            //5、组装数据返回
            ArrayList<User> list = new ArrayList<>();
            while (rs.next()){
                User u = new User();
                u.setId(rs.getInt("id"));
                u.setUser(rs.getString("user"));
                u.setPwd(rs.getString("pwd"));
                u.setNickname(rs.getString("nickname"));
                u.setAge(rs.getInt("age"));
                //添加到集合中
                list.add(u);
            }
            //6、返回结果
            return list;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        ArrayList<User> list = UserDAO_seAll.select();
        System.out.println("id \t 用户名 \t 密码 \t 名称 \t 年龄");
        for (User u : list) {
            System.out.println(u.getId()+"\t"+u.getUser()+"\t"+u.getPwd()+"\t"+u.getNickname()+"\t"+u.getAge());
        }
    }

}

7、通过JDBC查询User表的单个数据

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class UserDAO_Find {
    //查询跟增删改是不一样的,需要单独的额外书写
    //查询User表中的一条数据
    public static User find(int id){
        //1、写SQL的查询语句
        String sql = "select * from user where id = ?";
        //2、连接数据库
        Connection conn = DBUtil.getConn();
        //3、预编译
        try {
            PreparedStatement ps = conn.prepareStatement(sql);
            //设置参数
            ps.setObject(1,id);
            //4、执行查询
            ResultSet rs = ps.executeQuery(); //这里得到的是结果集
            //5、组装数据返回
            User u = new User();
            while (rs.next()){
                u.setId(rs.getInt("id"));
                u.setUser(rs.getString("user"));
                u.setPwd(rs.getString("pwd"));
                u.setNickname(rs.getString("nickname"));
                u.setAge(rs.getInt("age"));
            }
            //6、返回结果
            return u;
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return null;
    }

    public static void main(String[] args) {
        //获取列表回来
        User u = UserDAO_Find.find(5);
        System.out.println("id \t 用户名 \t 密码 \t 名称 \t 年龄");
        System.out.println(u.getId()+"\t"+u.getUser()+"\t"+u.getPwd()+"\t"+u.getNickname()+"\t"+u.getAge());
    }

}

  • 1
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
好的,我可以为您解答JDBC连接MySQL进行操作的问题。 首先,您需要确保已经安装了MySQL数据库Java开发环境。然后,您需要下载MySQL提供的JDBC驱动程序,将其添加到您的Java项目。 接下来,您可以使用以下代码示例来连接MySQL数据库进行操作: ``` import java.sql.*; public class JdbcExample { public static void main(String[] args) throws SQLException { Connection conn = null; PreparedStatement pstmt = null; ResultSet rs = null; try { // 连接数据库 conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydatabase", "username", "password"); // 执行操作 pstmt = conn.prepareStatement("SELECT * FROM mytable"); rs = pstmt.executeQuery(); while (rs.next()) { // 处理询结果 String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("Name: " + name + ", Age: " + age); } // 执行插入操作 pstmt = conn.prepareStatement("INSERT INTO mytable (name, age) VALUES (?, ?)"); pstmt.setString(1, "John"); pstmt.setInt(2, 30); int rows = pstmt.executeUpdate(); System.out.println(rows + " row(s) inserted."); // 执行更新操作 pstmt = conn.prepareStatement("UPDATE mytable SET age = ? WHERE name = ?"); pstmt.setInt(1, 31); pstmt.setString(2, "John"); rows = pstmt.executeUpdate(); System.out.println(rows + " row(s) updated."); // 执行操作 pstmt = conn.prepareStatement("DELETE FROM mytable WHERE name = ?"); pstmt.setString(1, "John"); rows = pstmt.executeUpdate(); System.out.println(rows + " row(s) deleted."); } catch (SQLException e) { e.printStackTrace(); } finally { if (rs != null) { rs.close(); } if (pstmt != null) { pstmt.close(); } if (conn != null) { conn.close(); } } } } ``` 在这个代码示例,我们首先使用`DriverManager.getConnection()`方法连接MySQL数据库,然后使用`PreparedStatement`对象执行询、插入、更新和操作。最后,我们使用`ResultSet`对象处理询结果,使用`SQLException`对象处理异常,使用`close()`方法关闭数据库连接、语句和结果集。 当然,在实际开发,您需要根据自己的需求进行适当的修和优化。希望这个示例可以帮助您理解如何使用JDBC连接MySQL进行操作
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

长风沛雨

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值