在 IDEA 中连接数据库实现增删改查,使用dao封装数据库操作+bean封装实体类+util封装数据库连接与释放(含源码下载)

5 篇文章 0 订阅

主要内容

利用SQLyog图形化工具建立数据库

数据库存储工具为MySQL,通过图形化工具SQLyog(亦可通过Navicat图形化工具)在数据库建立需要使用的数据库。数据库名为demo02_jdbc,两张表为管理员表admin、用户表user,如下(记得保存):
管理员admin表:
在这里插入图片描述
用户user表:
在这里插入图片描述

具体代码搭建

以下对具体的封装代码简单介绍。代码构成后的结构如下:
在这里插入图片描述

bean目录下的 用户实体类User

作用:封装用户实体类
在接下来的主函数Test中可以看到,有关管理员表的操作并未进行封装,可以在主函数中查看具体的JDBC连接数据库的七个步骤,方便理解。同时只对用户类进行封装也方便对整体结构的理解。

package bean;

/**
 * 实体类模型
 */
public class User {
    private int uid;             //用户id
    private String username;     //用户名
    private String password;     //用户密码

    //构造方法
    public User(String username, String password) {
        this.username = username;
        this.password = password;
    }

    public User() {
    }

    //get and set
    public int getUid() {
        return uid;
    }

    public void setUid(int uid) {
        this.uid = uid;
    }

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String toString() {
        return "{" +
                "用户编号:" + uid +
                ", 用户姓名:" + username +
                ", 用户密码:" + password +
                '}';
    }
}


util中对数据库的连接与释放的封装

对数据库的连接与释放封装在类DBUtil中,便于在dao中的数据库具体操作 对数据库连接与释放的调用。

package util;

import java.sql.*;

public class DBUtil {
    public DBUtil() {
    }

    private static String driverName = "com.mysql.cj.jdbc.Driver";      //JDBC驱动
    private static String userName = "root";
    private static String userPwd = "123";
    private static String dbName = "demo02_jdbc";
    private static String url1 = "jdbc:mysql://localhost:3306/" + dbName;
    private static String url2 = "?user=" + userName + "&password=" + userPwd;
    private static String url3="&useUnicode=true&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=UTC&useSSL=false";
    private static String url = url1 + url2 + url3;       //JDBC的 url
    //private static String url= "jdbc:mysql://localhost:3306/";

    /**
     * Task:建立数据库的连接
     * @return
     */
    public static Connection DBConnection(){
        try {
            Class.forName(driverName);     //1.加载JDBC驱动
            Connection con = DriverManager.getConnection(url,userName,userPwd);   //2.通过url建立JDBC的连接
            return con;
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    /**
     * Task:关闭连接、释放资源
     * @param con
     * @param pstm
     * @param rs
     */
    public static void DBClose(Connection con, PreparedStatement pstm, ResultSet rs){       //7.关闭连接,释放资源
        try {
            if (rs != null) {
                rs.close();
            }
            if (pstm != null) {
                pstm.close();
            }
            if (con != null) {
                con.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

Interface中数据库操作的接口层方法

主要是对数据库的增删改查、以及查询全部用户。

package Interface;

import bean.User;

import java.util.List;

public interface Operation {
    public abstract int create() throws Exception;
    public abstract int remove() throws Exception;
    public abstract int update() throws Exception;
    public abstract User find(User user) throws Exception;
    public abstract List<User> findAll() throws Exception;
}

dao层对数据库操作的具体方法

对数据库的增删改查的具体方法。具体的逻辑层的实现有待修改,但代码正确,可以运行。

package dao;

import Interface.Operation;
import bean.User;
import util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class UserDao implements Operation {
    //数据库操作语句
    protected static String ELEMENTS="username,userpwd";
    protected static String INSERT_SQL="insert into user ("+ELEMENTS+")"+"values (?,?)";   //插入人员姓名及密码
    protected static String DELETE_SQL ="delete from user where username=?";               //按照人员姓名删除人员
    protected static String UPDATE_SQL="update user set userpwd=? where username=?";      //按照人员姓名修改密码
    protected static String SELECT_SQL="select "+ELEMENTS+" from user where username=?";         //按照人员姓名查找人员
    protected  static String SELECT_ALL="select * from user";

    Connection con=null;
    PreparedStatement prepStmt=null;
    ResultSet rs=null;

    /**
     * Task:增加新的登陆成员
     * @return 返回执行了sql语句后被影响到的行数
     * @throws Exception
     */
    @Override
    public int create() throws Exception {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入需要增加人员的姓名:");
        String username=scanner.nextLine();
        System.out.print("请输入需要添加人员的密码:");
        String userpwd=scanner.nextLine();

        int n=0;    //返回执行了sql语句后被影响到的行数
        try{
            con= DBUtil.DBConnection();
            prepStmt =con.prepareStatement(INSERT_SQL);
            prepStmt.setString(1,username);
            prepStmt.setString(2,userpwd);

            n=prepStmt.executeUpdate();
        } catch(Exception e){
            e.printStackTrace();
        } finally{
            DBUtil.DBClose(con,prepStmt,rs);
        }
        return n;
    }

    /**
     *Task:执行删除操作
     * @return 返回执行了sql语句后被影响到的行数
     * @throws Exception
     */
    @Override
    public int remove() throws Exception {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入需要删除人员的姓名:");
        String username=scanner.nextLine();

        int n=0;
        try{
            con= DBUtil.DBConnection();
            prepStmt =con.prepareStatement(DELETE_SQL);
            prepStmt.setString(1,username);

            n=prepStmt.executeUpdate();
        } catch(Exception e){
            e.printStackTrace();
        } finally{
            DBUtil.DBClose(con,prepStmt,rs);
        }
        return n;
    }

    /**
     * Task:执行更新操作
     * @return 返回执行了sql语句后被影响到的行数
     * @throws Exception
     */
    @Override
    public int update() throws Exception {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入需要修改人员的姓名:");
        String username=scanner.nextLine();
        System.out.print("请输入新密码:");
        String userpwd=scanner.nextLine();
//
        int n=0;
        try{
            con= DBUtil.DBConnection();
            prepStmt =con.prepareStatement(UPDATE_SQL);
            prepStmt.setString(1,userpwd);
            prepStmt.setString(2,username);

            n=prepStmt.executeUpdate();  //
        } catch(Exception e){
            e.printStackTrace();
        } finally{
            DBUtil.DBClose(con,prepStmt,rs);
        }
        return n;
    }

    /**
     * Task:按人员名字查找
     * @param user 以User作为作为形参
     * @return
     * @throws Exception
     */
    @Override
    public User find(User user) throws Exception {
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入需要查询人员的姓名:");
        String username=scanner.nextLine();

        //ArrayList<User> arrayList=new ArrayList<User>();
        try{
            con= DBUtil.DBConnection();
            prepStmt =con.prepareStatement(SELECT_SQL);
            prepStmt.setString(1,username);

            rs=prepStmt.executeQuery(); //返回执行了查询语句的结果
            if(rs.next()){
                user=new User();
                user.setUsername(rs.getString(1));
                user.setPassword(rs.getString(2));
                //arrayList.add(user1);
            }
        } catch(Exception e){
            e.printStackTrace();
        } finally{
            DBUtil.DBClose(con,prepStmt,rs);
        }
        return user;
    }

    /**
     * Task:查询全部用户
     * @return 
     * @throws Exception
     */
    @Override
    public List<User> findAll() throws Exception {
        try{
            con=DBUtil.DBConnection();
            prepStmt=con.prepareStatement(SELECT_ALL);
            rs=prepStmt.executeQuery();
            List<User> list=new ArrayList<>();
            while (rs.next()){
                User user=new User();
                user.setUid(rs.getInt(1));
                user.setUsername(rs.getString(2));
                user.setPassword(rs.getString(3));
                list.add(user);
                //return list;
            }
            System.out.println(list);
        }catch (Exception e){
            e.printStackTrace();
        }finally {
            DBUtil.DBClose(con,prepStmt,rs);
        }
        return null;
    }
}

主函数类Test

在主函数中主要是对管理员的登陆操作的介绍,在主函数中未对数据库的操作进行封装,可以方便对连接数据库的步骤的理解。

import bean.User;
import dao.UserDao;
import util.DBUtil;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test {
    public static void main(String[] args){
        Scanner scanner=new Scanner(System.in);
        System.out.print("请输入管理员用户名:");
        String adminname=scanner.nextLine();
        System.out.print("请输入管理员密码:");
        String adminpwd=scanner.nextLine();

        Connection con=null;
        PreparedStatement prepStmt=null;
        ResultSet rs=null;
        boolean flag=false;      //作为是否登陆成功的标志

        try{
            con= DBUtil.DBConnection();       //1.加载JDBC驱动  2.通过url建立JDBC的连接
            String SQL="select adminname from admin where adminname=? and adminpwd=?";  //3.创建SQL语句
            prepStmt=con.prepareStatement(SQL);    //4.获取对象

            prepStmt.setString(1,adminname);
            prepStmt.setString(2,adminpwd);

            rs=prepStmt.executeQuery();   //5.执行SQL并返回结果
            while(rs.next())       //6.处理结果
            {
                flag=true;
            }
        } catch(Exception e){
            e.printStackTrace();
        } finally{
            DBUtil.DBClose(con, prepStmt, rs);   //7.关闭连接,释放资源
        }
        if(flag){
            System.out.println("登陆成功!");
            UserDao userDao=new UserDao();
            System.out.println("请选择操作:1.增加人员  2.删除人员  3.修改人员密码  4.查询人员  5.查询全部人员");
            int choose;     //输入数值以选择操作
            int sign;      //作为执行返回的标志
            Scanner scanner1=new Scanner(System.in);
            System.out.print("请输入选择:");
            choose=scanner1.nextInt();

            while (true){
                switch (choose)    //选择操作
                {
                    case 1:        //增加
                        try{
                            sign=userDao.create();
                            if(sign==1){System.out.println("增加人员成功!");}
                        }catch (Exception e){
                            System.out.println("增加失败");
                        }
                        break;
                    case 2:        //删除
                        try{
                            sign=userDao.remove();
                            if(sign==1){System.out.println("删除人员成功!");}
                        }catch (Exception e){
                            System.out.println("删除失败");
                        }
                        break;
                    case 3:       //修改
                        try{
                            sign=userDao.update();
                            if(sign==1){System.out.println("修改人员密码成功!");}
                        }catch (Exception e){
                            System.out.println("修改失败");
                        }
                        break;
                    case 4:       //查询
                        User users=new User();
                        try {
                            users=userDao.find(users);
                            if(users==null){
                                System.out.println("无相应值,查询失败!");
                            }else {
                                String un=users.getUsername();
                                String ps=users.getPassword();
                                System.out.print("查找成功!"+"    ");
                                System.out.println("用户名:"+un+",密码:"+ps);
                            }
                        }catch (Exception e){
                            System.out.println("查询失败!");
                        }
                        break;
                    case 5:       //查询全部
                        List<User> userList=new ArrayList<>();
                        try {
                            userList=userDao.findAll();
                        }catch (Exception e){
                            System.out.println("查询全部失败!");
                        }
                        break;
                    default:System.out.println("选择错误!!!");
                }
                Scanner scanner2=new Scanner(System.in);
                System.out.print("请输入选择:");
                choose=scanner2.nextInt();
            }
        }else {
            System.out.println("用户名或密码错误!");
        }
        //System.out.println();
    }
}

在IDEA中连接数据库MySQL

特别注意先在src目录下创建一个lib包,将数据库驱动的jar包放在此包中,如下图:(注意MySQL 的版本,在这使用的是8.0.15)

在这里插入图片描述
在IDEA中连接数据库MySQL的具体操作配置如下:

  1. 如图在IDEA右边找到Database,打开后点击加号(+)找到数据库MySQL,点击
    在这里插入图片描述
  2. 为数据库命名demo02(可以随便命名,无要求),并填入以下信息,注意用户名和密码的个人处理.
    在这里插入图片描述
  3. 点击Test Connection按键,若出现如下,则测试连接成功。
    在这里插入图片描述
  4. 测试连接成功后点击Apply,点击OK。 可以在IDEA中打开数据库如下:
    在这里插入图片描述

在数据库中插入数据

管理员表:
在这里插入图片描述
用户表:
在这里插入图片描述

源码下载

到此可以测试连接,并测试数据库的有关操作!

源码地址:https://download.csdn.net/download/qq_43524683/11265125



评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值