Mysql与Java连接----JDBC

news2024/10/6 12:28:55

前言:

当将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;
    }

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

如何查看centos7是否安装nginx

要查看 CentOS 7 系统上是否安装了 Nginx&#xff0c;您可以使用多种方法来检查。以下是一些常见的方法&#xff1a; 通过 RPM 包管理器查询 在 CentOS 系统上&#xff0c;可以使用 RPM 包管理器来查询已安装的软件包。要查看是否安装了 Nginx&#xff0c;您可以在终端中运行以…

宁夏银川市起名专家的老师颜廷利:死神(死亡)并不可怕,可怕的是...

在中国优秀传统文化之中&#xff0c;汉语‘巳’字与‘四’同音&#xff0c;在阿拉伯数字里面&#xff0c;通常用‘4’来表示&#xff1b; 湖南长沙、四川成都、重庆、宁夏银川最靠谱最厉害的起名大师的老师颜廷利教授指出&#xff0c;作为汉语‘九’字&#xff0c;倘若是换一个…

【GD32】03 - EXTI外部中断

EXTI EXTI&#xff0c;全称External Interrupt/Event Controller&#xff0c;即外部中断/事件控制器&#xff0c;是微控制器中的一个重要组成部分。它主要用于管理来自外部设备的中断和事件请求。以下是关于EXTI的详细介绍&#xff1a; 功能概述&#xff1a; EXTI管理了控制器的…

非常简单的长期兼职,无脑复制粘贴,每天稳定200-300+

带货这个概念已经不再陌生&#xff0c;许多人对此产生了浓厚的兴趣。今天&#xff0c;我将向大家介绍一个百家号带货项目&#xff0c;这是我一位朋友正在操作的项目。最近与他交流后&#xff0c;我觉得这个项目具有相当的操作性。他并非只运营了一个账号&#xff0c;而是同时管…

经典权限五张表案例分析

文章目录 模块分析模块分析 描述五张表的关系重要知识讲解抽取成一个BaseServletSpringIOC思想(底层)实现代码IOC概述 SPI机制(为学习框架做思想和技术铺垫)SPI引入1. 标准/规范2. 具体的实现3. 调用 SPI介绍SPI练习JDBC4.0免注册驱动原理Servlet实现方式三 ServletContainerIn…

卷积神经网络边缘识别

为什卷积神经网络能够识别图片呢&#xff1f;是基于图片相似度比较&#xff0c;两张图片的点击越大说明两张图片越像&#xff0c;比如我们那狗胡子的图片去比较&#xff0c;如果相似度很高&#xff0c;就是认为这个动物更像狗。点积越大&#xff0c;图片越相似&#xff0c;这个…

量化交易包含些什么?

我们讲过许多关于量化交易的内容&#xff0c;但是量化交易具体可以做些什么&#xff1f;很多朋友都还不清楚&#xff0c;我们详细来探讨下&#xff01; 第一&#xff1a;什么是量化交易&#xff1f; 量化交易是一种利用先进的数学模型和计算机技术&#xff0c;从大量的历史数…

老黄终于不穿皮衣了,分享一个AI换装AI试衣软件!

用AI实现在线试衣&#xff0c;或者在线换装&#xff0c;这不是一个新概念&#xff0c;肯定有人这么想过&#xff0c;但并不是所有人能都能轻松做到啊&#xff01; 今天就来分享一个人人都可以实现的方法&#xff0c;而且是那种傻瓜式的不用付钱的那种&#xff0c;甚至可以把软件…

ONVIF系列一:ONVIF介绍

感谢博主OceanStar的学习笔记&#xff0c;ONVIF系列二和系列三中安装操作过程及代码实现参考了这位博主的博客。 ONVIF系列&#xff1a; ONVIF系列一&#xff1a;ONVIF介绍 ONVIF系列二&#xff1a;Ubuntu安装gSOAP、生成ONVIF代码框架 ONVIF系列三&#xff1a;ONVIF客户端实现…

3款常用的可视化工具Matplotlib、Seaborn和Pandas

大家好&#xff0c;Seaborn 是基于 Matplotlib 的扩展库&#xff0c;Pandas 的可视化功能同样也依赖于 Matplotlib。尽管二者都使用相同的底层图形库&#xff0c;但绘制图表的方法却各有千秋。本文将介绍各种柱状图的绘制&#xff0c;比较 Matplotlib、Pandas 和 Seaborn 在数据…

ONVIF系列三:ONVIF客户端实现

ONVIF系列&#xff1a; ONVIF系列一&#xff1a;ONVIF介绍 ONVIF系列二&#xff1a;Ubuntu安装gSOAP、生成ONVIF代码框架 ONVIF系列三&#xff1a;ONVIF客户端实现 在系列二中完成了在Ubuntu上安装gSOAP并生成ONVIF代码框架&#xff0c;接下来我们利用生成的框架实现ONVIF客户端…

探究NVMe SSD HMB应用场景与影响-<续>

如果需要采用HMB功能&#xff0c;需要SSD支持NVME协议且NVMe 1.2及以上版本。NVME协议中对HMB对应有2个关键参数&#xff1a; HMB建议值&#xff08;HMPRE&#xff09;&#xff1a;设定实际分配给HMB使用的主机内存容量&#xff0c;为设备提供最优性能的内存分配量。 HMB最小值…

冥想的时候怎么专注自己

冥想的时候怎么专注自己&#xff1f;我国传统的打坐养生功法&#xff0c;实际最早可追溯到五千年前的黄帝时代。   每天投资两个半小时的打坐&#xff0c;有上千年之久的功效。因为当你们打坐进入永恒时&#xff0c;时间停止了。这不只是两个半小时&#xff0c;而是百千万亿年…

Github上5个实用的ChatGPT仓库

ChatGPT是一款基于聊天场景的大模型AI&#xff0c;最近火出圈。 Chat表示聊天&#xff0c;GPT表示大模型算法&#xff0c;它通过生成式的人机对话功能&#xff0c;让使用者第一次有了AI机器人‘懂我‘的感觉&#xff0c;而不是Siri、小爱那种傻瓜式的语音服务。 ChatGPT不仅仅…

现货黄金白银行情走高带来的投资机会分析

当现货黄金和白银行情呈现出走高的态势时&#xff0c;这常常被投资者解读为一个潜在的投资机会。本文旨在分析在黄金白银价格上涨时的投资机会&#xff0c;并指出应对策略。 一、走高行情背后的机会 行情的上升&#xff0c;往往代表了市场在某种程度上的认可&#xff0c;无论这…

知乎知+广告推广该如何做?怎么收费?

知乎作为一个汇聚高质量用户群体的知识分享平台&#xff0c;成为了众多品牌和产品推广的优选之地。特别是知乎的“知”广告推广服务&#xff0c;以其精准定向、内容原生的特点&#xff0c;深受广告主青睐。 一、知乎知广告推广基础 1. 什么是知乎知&#xff1f; 知是知乎官方…

企业网站慎用免费SSL证书!OV证书才是首选

市面上有很多免费证书提供&#xff0c;免费的SSL证书更适用于个人博客、学生学习、测试等应用场景。如果您的网站是企业网站一定慎用免费的SSL证书&#xff0c;而是选择企业级的OV证书。 一&#xff0e;免费SSL证书的风险 1安全性&#xff1a;免费SSL证书通常只提供基本的加密…

全新Transformer模型:全球与局部双重突破!

DeepVisionary 每日深度学习前沿科技推送&顶会论文分享&#xff0c;与你一起了解前沿深度学习信息&#xff01; 引言&#xff1a;探索视觉变换器在对象重识别中的全局与局部特征 在对象重识别&#xff08;Re-ID&#xff09;的研究领域中&#xff0c;如何有效地从不同时间…

pytest教程-45-钩子函数-pytest_report_testitemFinished

领取资料&#xff0c;咨询答疑&#xff0c;请➕wei: June__Go 上一小节我们学习了pytest_report_collectionfinish钩子函数的使用方法&#xff0c;本小节我们讲解一下pytest_report_testitemFinished钩子函数的使用方法。 pytest_report_testitemFinished 钩子函数在每个测试…

7天精通Web APIs——正则阶段案例(理论+实战)(第六天)

正则表达式的定义和使用 定义&#xff1a;是一种匹配模式&#xff0c;用于匹配字符串中字符组合 作用&#xff1a;表单验证&#xff08;匹配&#xff09;、过滤敏感词&#xff08;替换&#xff09;、字符串中提取我们想要的部分&#xff08;提取&#xff09; 使用分为两步&…