Java基础入门day43

day43

JDBC升级优化

目前所有的代码都放在一个main方法中进行测试,层次不够清晰明确,分工不够明确

可以对于目前功能进行分包设计

  • util:主要用来存放工具类

  • dao: data access object,数据访问对象,所有的crud功能都可以写在这里,里面主要存放dao的接口

  • dao.impl: dao的实现类,真正实现dao的crud功能

  • entity: 实体类,数据库中的一张表基本对应Java中的实体类。

  • test:目前的测试类,可以测试方法的执行结果和正确性

util.DBUtil.java

package com.saas.util;
​
import java.sql.*;
​
public class DBUtil {
​
    private static final String DB_DRIVER = "com.mysql.jdbc.Driver";
    private static final String DB_URL = "jdbc:mysql://localhost:3306/saas";
    private static final String DB_USER = "saas";
    private static final String DB_PASS = "saas123";
​
    private static Connection conn = null;
​
    /**
     * 获取数据库连接对象
     * @return 数据库连接对象
     */
    public static Connection getConn(){
        try {
​
            //  1.  注册驱动
//            Class.forName(DB_DRIVER);
​
            //  2.  获取连接对象
            conn = DriverManager.getConnection(DB_URL, DB_USER, DB_PASS);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        } catch (Exception e) {
            throw new RuntimeException(e);
        }
​
        return conn;
    }
​
    /**
     * 关闭数据库连接所需要的所有资源
     * @param conn  连接对象
     * @param stmt  声明对象
     * @param rs    结果集对象
     */
    public static void closeAll(Connection conn, Statement stmt, ResultSet rs){
        try {
            if(rs != null){             //  结果集不为空
                rs.close();             //  关闭结果集
                rs = null;              //  将结果集置空,以便Java虚拟机尽快回收资源
            }
            if(stmt != null){             //  声明对象不为空
                stmt.close();             //  关闭声明对象
                stmt = null;              //  将声明对象置空,以便Java虚拟机尽快回收资源
            }
            if(conn != null){             //  连接对象不为空
                conn.close();             //  关闭连接对象
                conn = null;              //  将连接对象置空,以便Java虚拟机尽快回收资源
            }
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
    }
}

entity.Student.java

package com.saas.entity;
​
public class Student {
    private int sid;
    private String name;
    private String sex;
    private double score;
    private int cid;
    private int age;
​
    @Override
    public String toString() {
        return "Student{" +
                "sid=" + sid +
                ", name='" + name + '\'' +
                ", sex='" + sex + '\'' +
                ", score=" + score +
                ", cid=" + cid +
                ", age=" + age +
                '}';
    }
​
    public int getSid() {
        return sid;
    }
​
    public void setSid(int sid) {
        this.sid = sid;
    }
​
    public String getName() {
        return name;
    }
​
    public void setName(String name) {
        this.name = name;
    }
​
    public String getSex() {
        return sex;
    }
​
    public void setSex(String sex) {
        this.sex = sex;
    }
​
    public double getScore() {
        return score;
    }
​
    public void setScore(double score) {
        this.score = score;
    }
​
    public int getCid() {
        return cid;
    }
​
    public void setCid(int cid) {
        this.cid = cid;
    }
​
    public int getAge() {
        return age;
    }
​
    public void setAge(int age) {
        this.age = age;
    }
}

dao.IStudentDao.java(接口)

package com.saas.dao;
​
import com.saas.entity.Student;
​
import java.util.List;
​
public interface IStudentDao {
​
    /**
     * 获取所有的学生对象集合
     * @return 学生对象集合
     */
    List<Student> getAllStudents();
​
    /**
     * 获取满足分页条件的学生对象集合
     * @param cp current page, 当前页码
     * @param ps page size, 每页的最大条目数
     * @return 满足分页条件的所有的学生对象集合
     */
    List<Student> getStudentsByPage(int cp, int ps);
​
    /**
     * 根据sid获取该sid的学生对象
     * @param sid 学号
     * @return  学号对应的学生
     */
    Student getStudentBySid(int sid);
​
    /**
     * 新增学生对象
     * @param s 要新增的学生
     * @return 新增学生执行后的受影响行数
     */
    int saveStudent(Student s);
​
    /**
     * 修改学生对象
     * @param s 新修改的学生对象
     * @return 修改学生后受影响的行数
     */
    int updateStudent(Student s);
​
    /**
     * 删除学生对象
     * @param s 要删除的学生对象
     * @return 删除学生对象之后受影响的行数
     */
    int deleteStudent(Student s);
​
    /**
     * 根据学生的sid删除学生对象
     * @param sid 要删除的学生编号
     * @return 删除该sid对应学生的受影响行数
     */
    int deleteStudent(int sid);
}

dao.impl.StudentDaoImpl

package com.saas.dao.impl;
​
import com.saas.dao.IStudentDao;
import com.saas.entity.Student;
import com.saas.util.DBUtil;
​
import java.sql.Connection;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
​
public class StudentDaoImpl implements IStudentDao {
​
    private Connection conn = null;
    private Statement stmt = null;
    private ResultSet rs = null;
​
    @Override
    public List<Student> getAllStudents() {
​
        return null;
    }
​
    @Override
    public List<Student> getStudentsByPage(int cp, int ps) {
​
        List<Student> list = null;
​
        conn = DBUtil.getConn();
​
        int si = (cp - 1) * ps;
​
        try {
            String sql = "select * from student limit " + si + ", " + ps;
​
            stmt = conn.createStatement();
​
            rs = stmt.executeQuery(sql);
​
            if(rs != null){
                list = new ArrayList<>();
​
                Student stu = null;
                while (rs.next()){
                    stu = new Student();
​
                    stu.setSid(rs.getInt(1));
                    stu.setName(rs.getString(2));
                    stu.setSex(rs.getString(3));
                    stu.setScore(rs.getDouble(4));
                    stu.setCid(rs.getInt(5));
                    stu.setAge(rs.getInt(6));
​
                    list.add(stu);
                }
            }
​
            DBUtil.closeAll(conn, stmt, rs);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
​
        return list;
    }
​
    @Override
    public Student getStudentBySid(int sid) {
        Student stu = null;
​
        conn = DBUtil.getConn();
​
        String sql = "select * from student where sid = " + sid;
​
        try {
            stmt = conn.createStatement();
​
            rs = stmt.executeQuery(sql);
​
            if (rs.next()){
                stu = new Student();
​
                stu.setSid(rs.getInt(1));
                stu.setName(rs.getString(2));
                stu.setSex(rs.getString(3));
                stu.setScore(rs.getDouble(4));
                stu.setCid(rs.getInt(5));
                stu.setAge(rs.getInt(6));
            }
​
            DBUtil.closeAll(conn, stmt, rs);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
​
        return stu;
    }
​
    @Override
    public int saveStudent(Student s) {
        return 0;
    }
​
    @Override
    public int updateStudent(Student s) {
        int result = 0;
​
        conn = DBUtil.getConn();
​
        String sql = "update student set name ='" + s.getName() + "', sex = '" +  s.getSex() + "', score = " +
                s.getScore() + ", cid = " +  s.getCid() + ", age = " + s.getAge() + " where sid =" + s.getSid();
​
        try {
            stmt = conn.createStatement();
​
            result = stmt.executeUpdate(sql);
​
            DBUtil.closeAll(conn, stmt, rs);
        } catch (SQLException e) {
            throw new RuntimeException(e);
        }
​
        return result;
    }
​
    @Override
    public int deleteStudent(Student s) {
        return 0;
    }
​
    @Override
    public int deleteStudent(int sid) {
        return 0;
    }
}

test.TestStudentDao

package com.saas.test;
​
import com.saas.dao.IStudentDao;
import com.saas.dao.impl.StudentDaoImpl;
import com.saas.entity.Student;
​
import java.util.List;
​
public class TestStudentDao {
​
    public static void main(String[] args) {
        IStudentDao isd = new StudentDaoImpl();
​
//        List<Student> list = isd.getStudentsByPage(3, 3);
//
//        for (Student s : list) {
//            System.out.println(s);
//        }
​
        Student stu = isd.getStudentBySid(200);
​
        System.out.println(stu);
​
        System.out.println("-------------------------");
​
        Student s = new Student();
​
        s.setSid(116);
        s.setName("zhiduoxing");
        s.setSex("male");
        s.setScore(101);
        s.setCid(3);
        s.setAge(22);
​
        System.out.println(isd.updateStudent(s) > 0);
    }
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mfbz.cn/a/607497.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaScript之数据类型(2)——复杂类型(object)

object的介绍&#xff1a; 我对于object的理解是和C/C中的结构体一样&#xff0c;是一个自定义的数据类型&#xff0c;我们可以通过多个简单的数据类型来定义一个便于我们使用的新的数据类型。 在网上某佬对于其解释如下&#xff1a; Object类型&#xff0c;我们也称为一个对象…

Redis学习5——Redis应用之签到

Redis位图bitMap 位图由一系列二进制位组成&#xff0c;每个位可以被设置为1或0&#xff0c;当我们在处理需要高效存储和操作大量二进制位数据的适合&#xff0c;位图是一个非常有用的工具。 位图操作命令有&#xff1a; SETBIT&#xff1a;设置位图中指定位置的位的值。可以…

3.ERC4626

ERC4626是一个vault&#xff0c;在DAI中&#xff0c;使用ETH换取DAI。其流程为先充值ETH到maker vault。 Vault 资产的管理、分红用户充值某项资产获取某个凭证该凭证作为分红、推出的依据Yield Farming/借贷/质押等 以太坊改进提案EIP:ethereum improvemwnt proposal 最初E…

Mysql8.0.30一次表锁问题的解决

起因 给material_config_field_data表的字段建立全文索引的时&#xff0c;发现该表卡死&#xff0c;然后无法对该表进行任何操作。 查找问题 执行sql #这个命令会显示InnoDB存储引擎的详细状态信息&#xff0c;包括锁等待和锁争用的信息 SHOW ENGINE INNODB STATUS结果 复制S…

​Inf-DiT:Upsampling Any-Resolution Image、Vidu、MVDiff、Trio-ViT

本文首发于公众号&#xff1a;机器感知 ​Inf-DiT&#xff1a;Upsampling Any-Resolution Image、Vidu、MVDiff、Trio-ViT Inf-DiT: Upsampling Any-Resolution Image with Memory-Efficient Diffusion Transformer Diffusion models have shown remarkable performance in im…

树莓派4-使用systemctl设置开机自启oled播放服务ip地址与logo

一、目标&#xff1a; 开机自启oled显示服务ip与端口&#xff0c;并播放logo 二、过程&#xff1a; 1、出现luma库不存在问题&#xff0c;修改.service文件&#xff0c;增加用户与用户组。在本地测试过程中可以使用python script.py执行python脚本&#xff0c;所以将.servic…

java递归-(迷宫问题)

前面 这里我们来玩个有趣的事情&#xff0c;链接是0221_韩顺平Java_老鼠出迷宫1_哔哩哔哩_bilibili 我们要找的是小老鼠按路径走到右下点 要点 我们这里方法调用时对于引用类型&#xff1a;如java中引用数据类型有哪些&#xff1f;_java引用数据类型-CSDN博客 会共享引用类型…

斯坦福大学的在线密码学课程

密码学是保护计算机系统信息不可或缺的工具。在本课程中&#xff0c;您将了解密码系统的内部工作原理&#xff0c;以及如何在实际应用中正确使用它们。课程首先将详细讨论当强大的对手窃听和篡改流量时&#xff0c;拥有共享密钥的双方如何进行安全通信。我们将研究许多已部署的…

部署Gerapy

1.Gerapy 是什么&#xff1f; Gerapy 是一款基于 Python 3 的分布式爬虫管理框架&#xff0c;它旨在简化和优化分布式爬虫的部署、管理和监控过程。 2.作用与功能&#xff1f; 2.1分布式管理&#xff1a; Gerapy 允许用户在多台机器上部署和管理Scrapy爬虫&#xff0c;实现爬虫…

【计算机毕设】小型企业办公自动化系统+vue - 免费源码(私信领取)

免费领取源码 &#xff5c; 项目完整可运行 &#xff5c; v&#xff1a;chengn7890 诚招源码校园代理&#xff01; 1. 研究目的 本项目旨在设计并实现一个小型企业办公自动化系统&#xff0c;利用Vue作为前端框架&#xff0c;为企业员工提供便捷的办公管理工具&#xff0c;提升…

基于51单片机的八路抢答器—加随机抽选功能

基于51单片机的八路抢答器 &#xff08;仿真&#xff0b;程序原理图&#xff0b;设计报告&#xff09; 功能介绍 具体功能&#xff1a; 1.主持人按键控制开始抢答&#xff1b; 2.开始抢答按下&#xff0c;数码管20秒倒计时&#xff1b; 3.8个按键代表八位选手&#xff0c;谁…

python面向函数

组织好的&#xff0c;可重复利用的&#xff0c;用来实现单一&#xff0c;或相关联功能的代码段&#xff0c;避免重复造轮子&#xff0c;增加程序复用性。 定义方法为def 函数名 (参数) 参数可动态传参&#xff0c;即使用*args代表元组形式**kwargs代表字典形式&#xff0c;代替…

tsconfig 备忘清单

前言 ❝ Nealyang/blog0 使用 ts 已多年&#xff0c;但是貌似对于 tsconfig 总是记忆不清&#xff0c;每次都是 cv 历史项目&#xff0c;所以写了这篇备忘录&#xff0c;希望能帮助到大家。 本文总结整理自 Matt Pocock 的一篇文章3&#xff0c;加以个人理解&#xff0c;并做了…

【爬虫基础1.1课】——requests模块

目录索引 requests模块的作用&#xff1a;实例引入&#xff1a; 特殊情况&#xff1a;锦囊1&#xff1a;锦囊2: 这一个栏目&#xff0c;我会给出我从零开始学习爬虫的全过程。感兴趣的小伙伴可以关注一波&#xff0c;用于复习和新学都是不错的选择。 那么废话不多说&#xff0c…

【Matlab-动画-附源码】3分钟教你用Matlab做一个Lorenz动画

lorenz-x-y-z Lorenz三个维度数据 在科研工作中&#xff0c;经常需要将数据可视化以便更好地理解和传达研究成果。 但大家主要放静态图片&#xff0c;而视频或动画通常比静态图片更具吸引力和表现力。AE, Manim太难学&#xff0c;Matlab就可以用来制作动画。 在这篇博客中&…

Linux-信号执行

1. 信号什么时候被处理 当进程从内核态返回到用户态的时候&#xff0c;进行信号的检测和处理 什么内核态&#xff0c;什么又是用户态呢&#xff1f; 当进程在CPU上运行时&#xff0c;内核态&#xff1a;允许进程访问操作系统的代码和数据&#xff0c;用户态&#xff1a;进程只…

视频降噪算法 hqdn3d 原理分析

视频降噪 视频降噪是一种处理技术&#xff0c;旨在减少视频中的噪声&#xff0c;提高画面质量。噪声可能来自多种源头&#xff0c;包括摄像机的传感器、压缩算法、传输过程中的干扰等。降噪处理对于视频监控、视频会议、电影后期制作以及任何需要高画质输出的应用场景都非常重…

【面经】网络

了解TCP/IP协议,了解常用的网络协议&#xff1a;study-area 一、TCP/IP协议 TCP/IP协议是一组网络通信协议&#xff0c;旨在实现不同计算机之间的信息传输。 1、TCP/IP四层模型&#xff1a; 网络接口层、网络层、传输层和应用层。 网络接口层&#xff1a;定义了数据的格式和…

揭秘抖音快速涨10000粉的方法:巨量千川投流让你轻松快速增粉

抖音已经成为了当今社交平台的热门之一&#xff0c;而如何快速涨粉已经成为了很多人关注的焦点。本文将揭秘一种高效的方式——巨量千川投流&#xff0c;通过官方真实流量和真实粉丝&#xff0c;每天快速涨关注&#xff0c;实现快速增粉1000~10万。 巨量千川投流是一种专业的抖…

Python-VBA函数之旅-pow函数

目录 一、pow函数的常见应用场景 二、pow函数使用注意事项 三、如何用好pow函数&#xff1f; 1、pow函数&#xff1a; 1-1、Python&#xff1a; 1-2、VBA&#xff1a; 2、推荐阅读&#xff1a; 个人主页&#xff1a;神奇夜光杯-CSDN博客 一、pow函数的常见应用场景 Py…
最新文章