[JAVA]JDBC如何实现写数据?——利用Java新增MySQL中存储的员工字段信息

我们在实现JDBC写数据之前需要先工具类做一些前置准备。—封装DbUtils工具类,是一个用于操作数据库的工具类,它提供了一些便捷的方式来执行SQL语句,获取数据库连接等。简化程序的开发。DbUtils工具类主要帮我们封装,打开连接,关闭连接的对应方法。

定义DbUtils类,用于与MySQL数据库建立连接以及关闭数据库连接资源

import java.sql.*;

public class DbUtils {
    /**
     * 创建新的数据库连接
     *
     * @return 返回新的Connection对象
     * @throws SQLException
     * @throws ClassNotFoundException
     */
    public static Connection getConnection() throws SQLException, ClassNotFoundException {
        //1.加载并注册JDBC驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //2.创建数据库连接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/imooc?useSSL=false&useUnicode=true&characterEncoding=UTF-8&serverTimezone=Asia/shanghai", "root", "root");
        return conn;
    }

    /**
     * 关闭连接,释放资源
     *
     * @param rs   结果集对象
     * @param stmt Statement对象
     * @param conn Connection对象
     */
    public static void closeConnection(ResultSet rs, Statement stmt, Connection conn) {
        try {
            if (rs != null) {
                rs.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (stmt != null) {
                stmt.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        try {
            if (conn != null && !conn.isClosed()) {
                conn.close();
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

在JDBC中如何新增员工数据,在SQL中使用INSERT语句

创建InsertCommand公共类 并声明该类实现Command接口,意味着该类必须实现Command接口中定义的方法

public interface Command {
    public void execute();//定义方法

}
//定义一个名为Command的接口,而实现该接口的类必须提供这些方法的具体实现。
package hrapp;

import common.DbUtils;

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

/**
 * 新增员工数据
 */
public class InsertCommand implements Command {

    @Override
    public void execute() {
        Scanner in = new Scanner(System.in);
        System.out.print("请输入员工编号");
        int eno = in.nextInt();
        System.out.print("请输入员工姓名");
        String ename = in.next();
        System.out.print("请输入员工薪资");
        float salary = in.nextFloat();
        System.out.print("请输入隶属部门");
        String dname = in.next();
        Connection conn = null;
        PreparedStatement pstmt = null;
        //新增数据 使用DbUtils获取数据库连接以及释放资源
        try {
            conn = DbUtils.getConnection();//会抛出俩个异常,用try-catch捕获
            String sql = "insert into employee(eno,ename,salary,dname)values(?,?,?,?) ";
            pstmt = conn.prepareStatement(sql);
            pstmt.setInt(1, eno);//1代表第一个参数
            pstmt.setString(2, ename);
            pstmt.setFloat(3, salary);
            pstmt.setString(4, dname);
            int cnt = pstmt.executeUpdate();//所有写操作都使用executeUpdate
            System.out.println("cnt:" + cnt);
            System.out.println(ename + "员工入职手续已办理");
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            DbUtils.closeConnection(null, pstmt, conn);
        }
    }
}

重点理解这些有关新增数据的代码操作 

Connection conn = null;

....

 conn = DbUtils.getConnection();

 使用之前定义过的DbUtils来获取数据库连接和释放资源,得到的是一个Connection对象,他会抛出俩个异常,故用try—catch进行捕获,同时将Connection对象在try块外面进行声明。

 String sql = "insert into employee(eno,ename,salary,dname)values(?,?,?,?) ";

 作用为SQL插入语句

PreparedStatement pstmt = null;
......

pstmt = conn.prepareStatement(sql);

通过调用conn.prepareStatement(sql)方法创建一个预编译的SQL语句对象pstmt。预编译的语句可以提高性能并防止SQL注入攻击

  pstmt.setInt(1, eno);//1代表第一个参数
  pstmt.setString(2, ename);
  pstmt.setFloat(3, salary);
  pstmt.setString(4, dname);

设置SQL语句中的参数,第一个参数是参数的位置索引,从1开始。通过这些方法,可以将Java变量的值绑定到SQL语句中的参数,确保SQL语句的动态性和安全性。 

  int cnt = pstmt.executeUpdate();

 执行SQL语句,这里用于插入一条员工记录。executeUpdate()方法返回一个整数,表示受SQL语句影响的行数。如果插入成功,通常返回值为1。

 System.out.println("cnt:" + cnt);

输出受影响的行数,用于确认插入操作是否成功执行

 System.out.println(ename + "员工入职手续已办理");

输出一条提示信息,表明员工的入职手续已办理完成,使用了参数ename来显示员工的名字 

  DbUtils.closeConnection(null, pstmt, conn);

 以上是有关员工的新增记录操作代码,然后我们打开入口类 HumanResourceApplication

,在入口类增加 办理员工入职的对应菜单

import java.util.Scanner;

public class HumanResourceApplication {
    public static void main(String[] args) {
        System.out.println("1-查询部门员工");
        System.out.println("2-办理员工入职");
        System.out.println("请选择功能:");
        Scanner in = new Scanner(System.in);
        Integer cmd = in.nextInt();
        Command command = null;
        switch (cmd) {
            case 1:   //查询部门员工
                command = new PstmtQueryCommand();
                command.execute();
                break;
            case 2:   //办理员工入职
                command = new InsertCommand();
                command.execute();
                break;


        }
    }
}

此时,代码创建完成,运行测试看新增员工数据操作能否实现

逐步输入要添加的员工数据 

查看数据库,此条新增的员工数据被成功添加。 

 

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

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

相关文章

LabVIEW提高开发效率技巧----插入式架构

随着LabVIEW项目规模的扩大和系统复杂性的增加,传统的单一代码架构难以应对后期维护和功能扩展的需求。插入式架构(Plug-In Architecture)作为一种模块化设计方式,通过动态加载和运行子VI,使系统功能更加灵活、模块化&…

【LLM之Agent】《Tool Learning with Large Language Models: A Survey》论文阅读笔记

概述 背景信息 近年来,基于大型语言模型(LLMs)的工具学习成为增强LLMs应对复杂任务能力的有力范式。尽管这一领域快速发展,现有文献的碎片化以及缺乏系统组织,给新入门者带来了阻碍。因此,本论文旨在对现…

Chrome DevTools 二: Performance 性能面板

Chrome DevTools 第二篇 Performance 主要介绍performance在我们日常开发中所起到的作用,以及如何利用performance 面板进行性能分析和相关优化建议。 性能面板 Performance 记录和分析页面运行中的所有活动,是解决前端性能问题的重要工具。 1. 控制栏…

分布式链路追踪-01初步认识SkyWalking

一 SkyWaling是什么? Skywalking是分布式系统的应用程序性能监视工具,专为微服务、云原生架构和基于容器(Docker、K8s、Mesos)架构而设计。SkyWalking 是观察性分析平台和应用性能管理系统,提供分布式追踪、服务网格遥…

idea 无法输入中文 快速解决

idea在某些情况会出现无法输入中文的情况,我们不去深究内部原因,直接上解决方案: 1、点击菜单help->Edit Custom VM Options 2、最后一行,追加: -Drecreate.x11.input.methodtrue 、 3、重启

软件分享丨PDF Shaper

【资源名】PDF Shaper 【地址】https://www.pdfshaper.com/ 【资源介绍】 PDF Shaper Professional是一款功能强大的PDF文档编辑与转换工具,使用它可以对PDF文件进行各种转换、提取、合并、旋转、加密、解密等编辑操作,主要功能有分割和合并PDF文件&…

无人机飞手执照培训为什么需要脱产学习?

无人机飞手执照培训需要脱产学习的原因主要基于以下几个方面: 一、知识体系的系统性与复杂性 无人机飞手培训涵盖的内容广泛且深入,包括无人机基础知识、飞行原理、气象学、法律法规等多个方面。这些知识体系相互关联,需要学员进行系统的学…

排序算法 —— 计数排序

目录 1.计数排序的思想 2.计数排序的实现 3.计数排序的分析 时间复杂度 空间复杂度 稳定性 优点 缺点 1.计数排序的思想 顾名思义,计数排序就是通过计数的方式来排序,其基本思想为: 开辟一个计数数组,统计每个数出现的次…

Windows 10、Office 2016/2019 和 PPTP 和 L2TP协议即将退役,企业应尽早做好准备

关心微软技术和产品的朋友一定对这个网站很熟悉:https://microsoftgraveyard.com/,这里静静的躺着很多微软技术和产品。近日,微软又在准备一场新的“告别仪式”了,这次是 Windows 10、Office 2016/2019 和一些老旧的协议与技术。让…

【Linux】按时间抽取附件

#1024程序员节|征文# 希望互相学习,共同进步 风123456789~-CSDN博客 1.背景 附件表 t_file 中有创建时间,需求是抽取202407-202408 月创建的附件到指定目录,并保持层级目录。 解决方案:由于抽取的附件条数…

2024 睿抗机器人开发者大赛(RAICOM)-【网络安全】CTF 部分WP

文章目录 一、前言二、MICS你是黑客么循环的压缩包Goodtime 三、WEBpy 四、Crypto变异凯撒RSAcrypto3 一、前言 WP不完整,仅供参考! 除WEB,RE,PWN外,其余附件均已打包完毕 也是一个对MISC比较友好的一个比赛~ 123网…

ES6:let和const命令解读以及变量的解构赋值

有时候,我们需要的不是答案,而是一双倾听的耳朵 文章目录 let和const命令变量的解构赋值 let和const命令 let和const命令都是声明变量的关键字,类同varlet特点 用来声明变量,不能再次定义,但是值可以改变存在块级作用…

【Nuvoton干货分享】开发应用篇 5 -- 32bit MCU Flash 操作

在实际开发中,我们都会碰到需要把部分数据存放在不易失存储空间上,比如外部NOR FLASH、EEPROM、SD等存储空间上,针对数据量不大的情况下,可以考虑将数据存放在芯片ROM存储空间。Nuvoton 32bit MCU ROM存储空间包括LDROM、APROM、S…

什么是缓存?

缓存是将文件副本存储在临时位置的过程,以便可以更快地访问这些文件。从技术上讲,缓存是文件或数据副本的任何临时存储位置,但通常是指互联网技术中的缓存。Web 浏览器缓存 HTML 文件、JavaScript 和图像,以便更快地加载网站&…

python 爬虫抓取百度热搜

实现思路: 第1步、在百度热搜页获取热搜元素 元素类名为category-wrap_iQLoo 即我们只需要获取类名category-wrap_为前缀的元素 第2步、编写python脚本实现爬虫 import requests from bs4 import BeautifulSoupurl https://top.baidu.com/board?tabrealtime he…

npm run serve 提示异常Cannot read property ‘upgrade‘ of undefined

npm run serve 提示Cannot read property ‘upgrade’ of undefined 一般是proxy的target代理域名问题导致的,如下: 解决方案: proxy: { “/remoteDealerReportApi”: { target: ‘http://demo-.com.cn’, //此域名有问题,会导致…

阿里云项目启动OOM问题解决

#1024程序员节|征文# 问题描述 随着项目业务的增长,系统启动时内存紧张,每次第一次启动的时候就会出现oom第二次或者第n的时候,就启动成功了。 带着这个疑问,我就在阿里云上提交了工单,咨询为什么第一次…

WIFI、NBIOT、4G模块调试AT指令连接华为云物联网服务器(MQTT协议)

一、前言 随着物联网(IoT)技术的飞速发展,越来越多的设备开始连接到互联网,形成了一个万物互联的世界。在这个背景下,设备与云端之间的通讯变得尤为重要。 本文将探讨几种常见的无线通信模块——EC20-4G、Air724ug-4…

CTFHUB技能树之文件上传——MIME绕过

开启靶场&#xff0c;打开链接&#xff1a; 直接指明是MIME验证 新建04MIME.php文件&#xff0c;内容如下&#xff1a; <?php echo "Ciallo&#xff5e;(∠・ω< )⌒★";eval($_POST[pass]);?> &#xff08;这里加了点表情&#xff0c;加带点私货&#x…

传感器驱动系列之PAW3212DB鼠标光电传感器

目录 一、PAW3212DB鼠标光电传感器简介 1.1 主要特点 1.2 引脚定义 1.3 传感器组装 1.4 应用场景 1.5 传感器使用注意 1.5.1 供电选择 1.5.2 SPI读写设置 1.5.3 MOTION引脚 1.6 寄存器说明 1.6.1 Product_ID1寄存器 1.6.2 MOTION_Status寄存器 1.6.3 Delta_X寄存器…