在 IDEA 中連接數據庫實現增刪改查,使用dao封裝數據庫操作+bean封裝實體類+util封裝數據庫連接與釋放(含源碼下載)

主要內容

利用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



發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章