通过JDBC接口连接MySql数据库同时实现增删改查功能并对Dao层进行封装

通过JDBC接口连接MySql数据库同时实现增删改查功能并对Dao层进行封装

第一章 相关概念

  • JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。

  • 我们安装好数据库之后,我们的应用程序也是不能直接使用数据库的,必须要通过相应的数据库驱动程序,通过驱动程序去和数据库打交道。其实也就是数据库厂商的JDBC接口实现,即对Connection等接口的实现类的jar文件。

  • 常用Statement方法:

    • execute(String sql):运行语句,返回是否有结果集

    • executeQuery(String sql):运行select语句,返回ResultSet结果集。

    • executeUpdate(String sql):运行insert/update/delete操作,返回更新的行数。

    • addBatch(String sql) :把多条sql语句放到一个批处理中。

    • executeBatch():向数据库发送一批sql语句执行。

第二章 工具准备

  • 首先需要准备MySql数据库,详细的安装可参考其他博主的博客,为了方便使用MySql数据,我们引入图形化工具SQLyog来对MySql数据库进行数据操作。如果没有MySql数据库可从此链接下载:https://www.mysql.com,因为SQLyog有试用期限所以没有SQLyog的可以从此链接进行下载:链接:https://pan.baidu.com/s/1cseKNoziqg7QZcd87t8LOA
    提取码:8096
  • 因为是绿化版本找到SQLyog的图标双击即可使用,但仍需要激活,使用文件夹中的激活密钥即可激活,如果短期使用可以去官网下载免费试用版,有能力还是支持正版软件。
  • 其次需要根据连接数据库的类型不同准备相应的驱动程序,可以根据自己数据库的版本去百度相关的JDBC驱动程序,这里提供MySql数据库的JDBC驱动程序下载地址:https://dev.mysql.com/downloads/connector/j/

第三章 详细过程

  • 首先在IDEA中创建一个项目可自拟,最好为英文。然后创建一个名为lib的软件包将下载好的MySql驱动程序解压将后缀名为jar的文件托到此目录下。此步是为了完成驱动程序的安装。
    请添加图片描述
  • 其次,将第四章的代码按照下面图片所示的结构粘贴到对应位置。注意Test类是和Dao包在同一个层,即都在src文件夹下。此步完成后基础代码就完成了。
    请添加图片描述
  • 然后进行数据库的准备,安装了MySql数据库后在搜索框搜素“服务“,然后找到MySql80右键启动服务
    请添加图片描述
  • 服务开启后在搜索框搜索MySql会出现MySql8.0 Command Line Client 点击然后进入命令窗口,输入数据库的密码
    请添加图片描述
  • 出现如下图所示证明已正确安装数据库同时服务也已经激活
    请添加图片描述
  • 然后使用图形化数据库工具SQLyog第一次打开软件后会出现下图所示的图像,其中新连接的名字可以和我的一样也可以自己设置,用户名和密码为自己设置的数据库的用户名和密码,其余的不动然后点击连接。
    请添加图片描述
  • 然后会连接到本地的数据库上然后进行建库和建表操作,在1处右键在2处选择创建数据库
    请添加图片描述
  • 创建的数据库的名字和编码格式按照下图格式即可
    请添加图片描述
  • 找到新创建的数据库然后点击左边的加号,然后会展示下图的各个选项然后在表选项上右键选择创建表
    请添加图片描述
  • 选择后会出现下面图片的样子
    请添加图片描述
  • 按照下图所示将表中内容完成即可,然后点击右下角的保存
    请添加图片描述
  • 保存后会弹出弹窗选择否就可以了
    请添加图片描述
  • 在创建好的表上选择打开表
    请添加图片描述
  • 打开表后会出现一个空表格按照下图所示将空表格内容补满即可,数据数量可适当增加或删减,注意每名学生的学号是唯一的,是要用于对数据进行操作的识别号。填完数据后要进行保存箭头所示即为保存按键。
    请添加图片描述
  • 至此所有操作都已完成,可以在IDEA中运行代码进行测试了。

第四章 详细代码

  • BaseDao类
package Dao;

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

public class BaseDao {
    
    
    //实现增删改查的功能  以及连接 和释放资源
    Connection cnt = null;
    PreparedStatement ps = null;
    ResultSet rs = null;

    //连接有3种方式
    public boolean getConnection() {
    
    
        String driver = "com.mysql.jdbc.Driver";
        String url = "jdbc:mysql://localhost:3306/student";
        String username = "root";
        String password = "root";
        try {
    
    
            Class.forName(driver);
            cnt = DriverManager.getConnection(url, username, password);
            System.out.println("数据库连接成功》》》》");
        } catch (SQLException | ClassNotFoundException e) {
    
    
            System.out.println("数据库连接失败》》》》");
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        return true;
    }

    //关闭资源
    public boolean closeResource() {
    
    
        if (rs != null) {
    
    
            try {
    
    
                rs.close();
            } catch (SQLException e) {
    
    
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        if (ps != null) {
    
    
            try {
    
    
                ps.close();
            } catch (SQLException e) {
    
    
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        if (cnt != null) {
    
    
            try {
    
    
                cnt.close();
            } catch (SQLException e) {
    
    
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return true;

    }


    //增删改
    public int ExecuteUpdate(String sql ,Object [] params){
    
    
        int updateRows=0;
        if(this.getConnection()){
    
    
            //获得sql语句
            try {
    
    
                ps=cnt.prepareStatement(sql);
                //给占位符的赋值
                for(int i=0;i<params.length;i++){
    
    
                    ps.setObject(i+1,params[i] );
                }
                //执行 增删改,返回影响的行数
                updateRows=ps.executeUpdate();

            } catch (SQLException e) {
    
    
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }

        return updateRows;

    }

    //查询 全部信息 或者指定部分信息
    public ResultSet ExecuteQuery(String sql ,Object [] params){
    
    
        if(this.getConnection()){
    
    
            try {
    
    
                ps=cnt.prepareStatement(sql);
                //给占位符赋值
                for(int i=0;i<params.length;i++){
    
    
                    ps.setObject(i+1, params[i]);
                }
                // 执行查询,返回值是ResultSet型的
                rs=ps.executeQuery();
            } catch (SQLException e) {
    
    
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
        return rs;
    }

}
  • UserDao接口
package Dao;

import java.util.Date;
//接口类
public interface UserDao {
    
    
    //查询全部信息
    public void getList();

    //查询部分信息
    public void getListBySNo(String SNo);

    //增
    public void add(String SNo,String SN,String Sex,int Age,String Dept,int Score);
    //删
    public void delete(String SNo);
    //改
    public void update(String SNo, int Score);

}
  • UserDaoImpl类
package Dao;

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



public class UserDaoImpl extends BaseDao implements UserDao {
    
    
    ResultSet rs = null;
    Connection cnt = null;
    PreparedStatement ps = null;

    //查询全部信息
    @Override
    public void getList() {
    
    
        // TODO Auto-generated method stub
        String sql = "select SNo,SN,Sex,Age,Dept,Score from S";
        //初始化 数组 ,避免空指针
        Object[] params = {
    
    };
        rs = this.ExecuteQuery(sql, params);
        //在控制台输出 rs的结果集
        try {
    
    
            while (rs.next()) {
    
    
                String SNo = rs.getString(1);
                String SN = rs.getString(2);
                String Sex = rs.getString(3);
                int Age = rs.getInt(4);
                String Dept = rs.getString(5);
                int Score = rs.getInt(6);
                System.out.printf("%-6s %-6s %-6s %-6d %-6s %-6d\n",SNo, SN,Sex,Age,Dept,Score);
            }
        } catch (SQLException e) {
    
    
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
    
    
            this.closeResource();
        }
    }

    //查询部分信息
    @Override
    public void getListBySNo(String SNo) {
    
    
        // TODO Auto-generated method stub
        //返回值是ResultSet类型
        String sql = "select SNo,SN,Sex,Age,Dept,Score from S where SNo like ?";
        Object[] params = {
    
    SNo};
        rs = this.ExecuteQuery(sql, params);
        //在控制台遍历出 结果集
        try {
    
    
            while (rs.next()) {
    
    
                String SN = rs.getString(2);
                String Sex = rs.getString(3);
                int Age = rs.getInt(4);
                String Dept = rs.getString(5);
                int Score = rs.getInt(6);
                System.out.printf("%-6s %-6s %-6s %-6d %-6s %-6d\n",SNo, SN,Sex,Age,Dept,Score);
            }
        } catch (SQLException e) {
    
    
            // TODO Auto-generated catch block
            e.printStackTrace();
        } finally {
    
    
            this.closeResource();
        }
    }

    //增
    @Override
    public void add(String SNo,String SN,String Sex,int Age,String Dept,int Score) {
    
    
        // TODO Auto-generated method stub
        String sql = "insert into S(SNo,SN,Sex,Age,Dept,Score) values(?,?,?,?,?,?)";
        Object[] params = {
    
    SNo,SN,Sex,Age,Dept,Score};
        int i = this.ExecuteUpdate(sql, params);
        if (i > 0) {
    
    
            System.out.println("添加成功");
        }
    }

    //删除
    @Override
    public void delete(String SNo) {
    
    
        // TODO Auto-generated method stub
        String sql = "delete from S where SNo=?";
        Object[] params = {
    
    SNo};
        int i = this.ExecuteUpdate(sql, params);
        if (i > 0) {
    
    
            System.out.println("删除成功");
        }
    }

    //修改
    @Override
    public void update(String SNo, int Score) {
    
    
        // TODO Auto-generated method stub
        String sql = "update S set Score=? where SNo=?";
        Object[] params = {
    
    Score, SNo};
        int i = this.ExecuteUpdate(sql, params);
        if (i > 0) {
    
    
            System.out.println("修改成功");

        }
    }

}
  • Test类
import Dao.UserDao;
import Dao.UserDaoImpl;

public class Test {
    
    

    public static void main(String[] args) {
    
    

        UserDao userDao = new UserDaoImpl();

        userDao.getList();//查找表中全部内容
        //userDao.getListBySNo("120101");//通过学号查找固定学生的信息

        //userDao.add("120111","李某某","男",21, "计算机",100);//添加学生的信息
        //userDao.delete("120111");//通过学号删除某个学生的信息
        //userDao.update("120105", 60);//通过学号修改某个学生的分数

    }
}

第五章 调试结果

  • 首先进行查找表中全部内容操作
    请添加图片描述

  • 然后进行通过学号查找固定学生的信息操作,查找学号为120101的学生的全部信息
    请添加图片描述

  • 然后进行添加学生信息的操作,添加一个学号为120111的学生的全部信息
    请添加图片描述
    请添加图片描述

  • 然后进行删除学生信息的操作,将新增加的学号为120111的学生的信息删除
    请添加图片描述
    请添加图片描述

  • 最后进行通过学号修改学生分数的操作,将学生的成绩由60改为100
    请添加图片描述
    请添加图片描述
    请添加图片描述

猜你喜欢

转载自blog.csdn.net/qq_56866000/article/details/128853818