Mysql与Java连接----JDBC

前言:

当将Java与MySQL数据库连接时,JDBC(Java Database Connectivity)是一种重要的技术。JDBC允许Java应用程序通过标准的数据库访问方式与不同的关系型数据库进行通信,其中包括MySQL。通过使用JDBC,Java开发人员可以轻松地执行数据库操作,如查询数据、更新数据和执行存储过程等。

在本文中,我们将探讨如何使用JDBC来连接MySQL数据库。首先,我们将介绍JDBC的基本概念,包括驱动程序、连接URL和基本的数据库操作。然后,我们将详细说明如何在Java应用程序中配置和使用JDBC驱动程序来连接MySQL数据库。我们将覆盖建立连接、执行查询、插入和更新数据以及关闭连接等方面的重要步骤。

无论您是初学者还是有经验的Java开发人员,本文都将为您提供足够的信息来开始在Java应用程序中使用JDBC与MySQL数据库进行交互。通过掌握这些基础知识,您将能够构建更强大、更可靠的数据库驱动的Java应用程序,并更好地理解Java与数据库之间的交互过程。

接下来,让我们深入研究JDBC的基础知识,并开始探索如何在Java应用程序中利用JDBC来连接MySQL数据库。

作者建议:学习知识在于深度理解,多动手、多动脑,总能更快地领悟。不要仅仅停留在阅读代码的层面,亲自动手敲打一遍,会带来更丰富的收获。通过实践,我们能够更深入地理解知识,掌握技能,并且在解决问题时更加得心应手。相信自己的能力,坚持不懈地实践,你将会取得更大的进步和成就。让学习成为一种习惯,让动手实践成为你提升的捷径,加油!你是最棒的!

目录

概述

JDBC搭建

在项目中添加jar文件

注册JDBC驱动程序:

初始化驱动程序 ----- 这样就打开与数据库的通信通道

建立与数据库连接

发送sql

Statement

PrepareStatement

关闭数据库

preparedStatement和Statement的区别

查询所有信息---ResultSet executeQuery() 


概述

JDBC全程:Java DataBase connection  ----  java数据库连接

java可以连接不同的数据库,但是不同的数据库具体连接细节不同.

连接: java设计出一系列的连接数据库的接口规范,然后有不同的数据库连接开发商去实现数据库的具体连接.    接口oper,开发商去实现接口,然后重写接口中方法.

JDBC API:

供程序员调用的接口与类,集成在java.sql包中

DriverManager类作用:管理各种不同的jDBC驱动

Connection 接口 与特定数据库的连接

Statement 接口 执行sql

PreparedStatement接口 执行sql

ResultSet接口 接收查询结果

mysql-connector-java-8.0.16.jar 就是mysql官方开发实现,具体连接数据库功能代码

JDBC搭建

在项目中添加jar文件

        在项目下创建lib目录

     将下载好的jar文件拖入lib中

     右键jar文件找到这个启用就OK了

注册JDBC驱动程序:

初始化驱动程序 ----- 这样就打开与数据库的通信通道

Class.forName(“com.mysql.cj.jdbc.Driver”); //反射实现

或者 DriverManager.registerDriver(new Driver());

建立与数据库连接

DriverManager.getConnection() 创建一个Connection对象

Connection conn = DriverManager.getConnection(URL,USER,PASSWORD);

URL---jdbc:mysql://ip(本地:127.0.0.1):端口(3306)/数据库名?serverTimezone=Asia/Shanghai

通常只需要改变 数据库名  ip(如果与自己连接ip:127.0.0.1)  端口号(创建数据库的时候设置) 其他的不变

USER:用户名字---创建数据库设置    PASSWORD:用户密码---创建数据库设置

发送sql

Statement st = connection.createStatement();

executeUpdate(String sql) ---- 用来发送sql

实例:这个语句就给mysql数据库中发送一条数据,用来给student数据库添加数据

Statement st = connection.createStatement();
st.executeUpdate("INSERT INTO student(NAME,gender,birthday,phone,address,reg_time,majorid)"+"VALUES('"+name+"','"+gender+"','"+birthday+"','"+phone+"','"+address+"',now(),"+majorid+") ");
Statement

Satement中的方法:

Int executeUpdate(String sql) 用于执行ddl语句和dml(增,删,改)语句返回操作的行数

用于执行ddl语句返回0

用于执行dml语句返回操作的行数

增添数据

    public static void main(String[] args) {
        try {
            set_value("素烧","男", "2022-2-2", "15235465236", "汉中", 2);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }   


 public static void set_value(String name, String gender, String birthday, String phone, String address, int majorid) throws ClassNotFoundException, SQLException {
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //建立与数据库的链接,或得连接对象
        String url = "jdbc:mysql://127.0.0.1:3306/shooldb?serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);

        //发送
        Statement st = connection.createStatement();
        st.executeUpdate("INSERT INTO student(NAME,gender,birthday,phone,address,reg_time,majorid)"+"VALUES('"+name+"','"+gender+"','"+birthday+"','"+phone+"','"+address+"',now(),"+majorid+") ");


        //关闭数据库连接
        st.close();
        connection.close();
    }

修改数据

    public static  void XiuGai(int num,String name, String gender, String birthday, String phone, String address, int majorid) throws ClassNotFoundException, SQLException {
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //建立与数据库的链接,或得连接对象
        String url = "jdbc:mysql://127.0.0.1:3306/shooldb?serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);

        //发送
        Statement st = connection.createStatement();
        st.executeUpdate("UPDATE student SET name = '" + name + "', gender = '" + gender + "' WHERE num = 1");
        //关闭数据库连接
        st.close();
        connection.close();
    }
PrepareStatement

在sql语句中参数位置使用占位符,使用setXX方法向sql中设置参数

PrepareStatement ps = connection.prepareStatement(sql);

PrepareStatement中的方法:

Int executeUpdate() 用于执行ddl语句和dml(增,删,改)语句返回操作的行数

用于执行ddl语句返回0

用于执行dml语句返回操作的行数

增添数据

    public static void set_value(String name, String gender, String birthday, String phone, String address, int majorid) throws ClassNotFoundException, SQLException {
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //建立与数据库的链接,或得连接对象
        String url = "jdbc:mysql://127.0.0.1:3306/shooldb?serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);
//?占位符,表示此处需要接收一个参数        
         PreparedStatement ps = connection.prepareStatement("insert into student(name,gender,birthday,phone,address,reg_time,majorid)" + "values (?,?,?,?,?,now(),?)");
        ps.setObject(1, name);
        ps.setObject(2, gender);
        ps.setObject(3,birthday);
        ps.setObject(4,phone);
        ps.setObject(5,address);
        ps.setObject(6,majorid);
        //启动
        ps.executeUpdate();
        ps.close();
        connection.close();
    }

修改数据 

    public static  void XiuGai(int num,String name, String gender, String birthday, String phone, String address, int majorid) throws ClassNotFoundException, SQLException {
        //加载驱动
        Class.forName("com.mysql.cj.jdbc.Driver");
        //建立与数据库的链接,或得连接对象
        String url = "jdbc:mysql://127.0.0.1:3306/shooldb?serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url, user, password);
        PreparedStatement ps = connection.prepareStatement("update student set name = ?,gender = ?,birthday = ?,phone = ?,address = ?,majorid = ? where num = ?");
        ps.setObject(1, name);
        ps.setObject(2, gender);
        ps.setObject(3,birthday);
        ps.setObject(4,phone);
        ps.setObject(5,address);
        ps.setObject(6,majorid);
        ps.setObject(7,num);
        //启动
        ps.executeUpdate();
        //关闭
        ps.close();
        connection.close();
    }

关闭数据库

st.close(); --- 关闭发送

connection --- 关闭连接

preparedStatement和Statement的区别

相同点:都是向数据库发送sql

Statement :将参数直接拼接到sql中,要拼接字符串,写起来麻烦,安全性差 如果:删除参数加一个 or 1=1 可以直接将全部数据删除

preparedStatement:先用?占位,然后通过setObject方法赋值,写起来不用拼接字符串,安全可靠的在赋值时进行检测(?---setObject()执行会检测数据,占位符只能接受一个数据所以有or的时候就会直接报错),可以防止sql注入攻击

如果传进去多个值就会报错

如果你的删除demo2.delete("112 or 1=1"); 传参进去这样  

查询所有信息---ResultSet executeQuery() 

ResultSet executeQuery()  将查询结果封装到一个ResultSet对象中,需要将ResultSet对象的数据封装到对应的对象中.

实例:将数据库的数据全部拿出,并且赋给student类

    public ArrayList<Student> findStudentByGender(String gender) throws ClassNotFoundException, SQLException {
        Class.forName("com.mysql.cj.jdbc.Driver");
        String url = "jdbc:mysql://127.0.0.1:3306/schooldb?serverTimezone=Asia/Shanghai";
        String user = "root";
        String password = "root";
        Connection connection = DriverManager.getConnection(url,user,password);
        PreparedStatement ps = connection.prepareStatement("select num,name,gender,birthday,phone,reg_time from student where gender = ? ");
        ps.setObject(1,gender);

        ArrayList<Student> students  = new ArrayList<>();//创建学生集合,用来存储查询的多个学生对象
        ResultSet rs = ps.executeQuery();//将查询结果封装到一个ResultSet对象中, 需要将ResultSet对象中的数据封装到对应的对象中
        //next() 如果结果集中有数据返回true,否则返回false
         while (rs.next()){
             //每循环一次,拿到一个学生对象
             Student student =  new Student();
             student.setNum(rs.getInt("num"));
             student.setName(rs.getString("name"));
             student.setGender(rs.getString("gender"));
             student.setBirthday(rs.getDate("birthday"));
             student.setPhone(rs.getString("phone"));
             student.setRegTime(rs.getTimestamp("reg_time"));
             students.add(student);//将学生对象存入到学生集合中
         }

            rs.close();
            ps.close();
            connection.close();
          return students;
    }

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

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

相关文章

ICode国际青少年编程竞赛- Python-5级训练场-多参数函数

ICode国际青少年编程竞赛- Python-5级训练场-多参数函数 1、 def go(a, b):Spaceship.step(2)Dev.step(a)Spaceship.step(b)Dev.turnRight()Dev.step(b)Dev.turnLeft()Dev.step(-a) Dev.turnLeft() Dev.step(3) Dev.step(-3) go(3, 2) go(6, 1) go(5, 2) go(4, 3)2、 def go(…

processing完整教程

概述&#xff1a;processing在我眼里就是libgdx的高度封装&#xff0c;如果各位会libgdx&#xff0c;学processing应该可以说是无师自通&#xff0c;当然processing是java语言那边的。 processing是什么&#xff1f; 官网是这样解释的&#xff1a;Processing 是一本灵活的软件…

快速判断出485从站设备是否支持MODBUS RTU无线通讯

对于变频器和仪表设备&#xff0c;都支持485串口通讯&#xff0c;那么怎么判断从站设备支持那种协议呢&#xff1f;通常分为两种方式去判断&#xff1a;1.从设备参数参看2.从设备通讯报文查看。本次文章以以台达MH300系列变频器为例。 1.从设备通讯参数查看 使用设备之前一定…

C语言 文件操作

目录 1. 什么是文件&#xff1f;2. 二进制文件和文本文件3. 文件的打开和关闭3.1 流和标准流3.1.1 流3.1.2 标准流 3.2 文件指针3.3 打开、关闭文件3.3.1 fopen - 打开文件3.3.2 fclose - 关闭文件 4. 文件的顺序读写4.1 fgetc - 从文件流获取一个字符4.2 fputc - 将一个字符写…

金融业开源软件应用 评估规范

金融业开源软件应用 评估规范 1 范围 本文件规定了金融机构在应用开源软件时的评估要求&#xff0c;对开源软件的引入、维护和退出提出了实现 要求、评估方法和判定准则。 本文件适用于金融机构对应用的开源软件进行评估。 2 规范性引用文件 下列文件中的内容通过文中的规范…

智能制造数字工厂未来三年规划方案(80页ppt下载)

一、资料介绍 智能制造数字工厂未来三年规划方案是一份全面而深入的战略性文件&#xff0c;旨在指导我们公司在未来三年内实现智能制造领域的跨越式发展。这份80页的PPT资料&#xff0c;以“智能制造、智能制造系统、数字化工厂、数字孪生工厂、智能工厂和数字化车间”为核心关…

Amesim基础篇-热仿真常用模型库-Electrical Basics/Electric Storage

前言 在动力电池仿真中中我们不免会用到该元件库中的模型&#xff0c;该库中包含基本的电路元件与电池模型。具体的相关模型介绍如下&#xff1a; 1 电压源、电流源、功率源、接地 如图&#xff0c;分别为电压源、电流源和功率源&#xff0c;其中功率源在仿真中经常用到&…

《intel开发手册卷3》读书笔记1

1、CPU工作模式 1&#xff09;实模式&#xff1a;8086的寄存器只有16位&#xff0c;我们也习惯于称8086的工作模式为16位模式。后续的CPU为了保持兼容性&#xff0c;在芯片上了电以后&#xff0c;还必须运行于16位模式之下。这种模式还有个正式的名字叫做实模式。在实模式下&am…

Stable Diffusion WebUI 绘画

配置环境介绍​ 目前平台集成了 Stable Diffusion WebUI 的官方镜像&#xff0c;该镜像中整合如下资源&#xff1a; GpuMall智算云 | 省钱、好用、弹性。租GPU就上GpuMall,面向AI开发者的GPU云平台 Stable Diffusion WebUI版本&#xff1a;v1.7.0 Python版本&#xff1a;3.1…

vue2 报错 component name“Index“should always be multi-word

报错原因&#xff1a; 组件名称应该为俩个或俩个以上单词组成的&#xff0c;并且还要是大驼峰命名&#xff0c;例如&#xff1a;MyIndex&#xff0c;MyLogin等 解决方法一&#xff1a; 将组件名称改为俩个或俩个以上单词组成的名称&#xff0c;且为大驼峰命名&#xff0c;例如…

半小时搞懂STM32面经知识——ADC

1.ADC 1.1 ADC是什么&#xff1f; 将连续变量的模拟信号转换为离散变量的数字信号 1.2 ADC的位数&#xff1f;&#xff08;采样精度&#xff09; F1和F4都具有3个ADC&#xff0c;F1可提供21个输入通道&#xff0c;F4可以提供24个输入通道。 F4的ADC支持12位&#xff0c;10位…

2024最新软件测试面试题及答案【史上最全】

以下是软件测试相关的面试题及答案&#xff0c;欢迎大家参考! 1、你的测试职业发展是什么? 测试经验越多&#xff0c;测试能力越高。所以我的职业发展是需要时间积累的&#xff0c;一步步向着高级测试工程师奔去。而且我也有初步的职业规划&#xff0c;前3年积累测试经验&…

SparkSQL概述

1.1. SparkSQL介绍 SparkSQL&#xff0c;就是Spark生态体系中的构建在SparkCore基础之上的一个基于SQL的计算模块。SparkSQL的前身不叫SparkSQL&#xff0c;而是叫做Shark。最开始的时候底层代码优化、SQL的解析、执行引擎等等完全基于Hive&#xff0c;总是Shark的执行速度要比…

动手学深度学习18 预测房价竞赛总结

动手学深度学习18 预测房价竞赛总结 李沐老师代码AutoGluonh2o集成学习automlQA 视频&#xff1a; https://www.bilibili.com/video/BV15Q4y1o7vc/?vd_sourceeb04c9a33e87ceba9c9a2e5f09752ef8 代码&#xff1a; https://www.bilibili.com/video/BV1rh411m7Hb/?vd_sourceeb04…

JAVA系列:IO流

JAVA IO流 IO流图解 一、什么是IO流 I/O流是Java中用于执行输入和输出操作的抽象。它们被设计成类似于流水&#xff0c;可以在程序和外部源&#xff08;如文件、网络套接字、键盘、显示器等&#xff09;之间传输数据。按处理数据单位分为&#xff1a; 1字符 2字节 、 1字节(…

Linux修炼之路之权限

目录 引言 一&#xff1a;Linux中用户的分类 二&#xff1a;在Linux中的权限 1.权限的两种属性 1.人的属性 2.事物属性 -主要以文件属性为主 3.文件权限值的两种表示方式方法 2.更改文件访问者(拥有者&#xff0c;所属组&#xff0c;其他人)权限属性 3.更改文件的拥有…

电子作业指导书系统如何提升医疗设备工厂的生产效率

在医疗设备工厂中&#xff0c;电子作业指导书&#xff08;ESOP&#xff09;正逐渐成为提升生产效率的关键因素。 一、电子作业指导书系统提供了即时可得的准确信息。 电子作业指导书系统与传统的纸质作业指导书相比&#xff0c;员工可以在工作现场通过电子设备随时查阅最新、最…

基于PSO优化的PV光伏发电系统simulink建模与仿真

目录 1.课题概述 2.系统仿真结果 3.核心程序与模型 4.系统原理简介 5.完整工程文件 1.课题概述 基于PSO优化的PV光伏发电系统simulink建模与仿真。其中PSO采用matlab编程实现&#xff0c;通过simulink的函数嵌入模块&#xff0c;将matlab调用进simulink中。 2.系统仿真结…

【Linux系统化学习】守护进程 | 序列化和反序列化

目录 前言 守护进程 会话 进程组 setsid系统调用 守护进程系统调用 再谈协议 序列化和反序列化 Json 前言 上两篇文章我们所编写的服务器&#xff0c;并算不上真正意义上的服务器一般的服务器都是要随时能够访问的&#xff0c;就像我们在任何时间段都可以打开抖音获取…

[C++核心编程-09]----C++类和对象之继承

&#x1f3a9; 欢迎来到技术探索的奇幻世界&#x1f468;‍&#x1f4bb; &#x1f4dc; 个人主页&#xff1a;一伦明悦-CSDN博客 ✍&#x1f3fb; 作者简介&#xff1a; C软件开发、Python机器学习爱好者 &#x1f5e3;️ 互动与支持&#xff1a;&#x1f4ac;评论 &…