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,否则返回falsewhile (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.hqwc.cn/news/697303.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

n的阶乘(函数)(C语言)

一、运行结果&#xff1b; 二、源代码&#xff1b; # define _CRT_SECURE_NO_WARNINGS # include <stdio.h>//声明n的阶乘函数fac; int fac(int n);int main() {//初始化变量值&#xff1b;int n, result;//获取要阶乘的数&#xff1b;printf("请输入要阶乘的n&…

基于SSM的理发店会员管理系统的设计和实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的理发店会员管理系统的设计和实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0…

Today At Apple 2024.04.22 Iphone 入门 Mac 办公高4个效技巧

官网&#xff1a; https://www.apple.com/today/Apple 亚洲第一大商店&#xff1a;Apple 静安零售店现已在上海开幕如下预约课程&#xff1a;下载 Apple Store&#xff08;不是app store&#xff09;&#xff0c;点击课程预约笔记&#xff1a;Today At Apple Notes果粉加群 &am…

鸿蒙ArkUI开发:常用布局【交叉轴】

交叉轴 垂直于主轴方向的轴线。Row容器交叉轴为纵向&#xff0c;Column容器交叉轴为横向。通过alignItems属性设置子元素在交叉轴&#xff08;排列方向的垂直方向&#xff09;上的对齐方式alignSelf属性用于控制单个子元素在容器交叉轴上的对齐方式&#xff0c;其优先级高于al…

亚马逊测评实操干货,跨境电商做测评,卖家店铺测评攻略!

亚马逊在全球有超过 2 亿付费 Prime 会员和数以亿计的活跃买家账户&#xff0c;卖家们可以通过亚马逊一流的国际物流扩展业务。这是一个知名度极高的老牌跨境电商平台&#xff0c;而且平台流量非常大&#xff0c;成功打造爆款Listing这是每位亚马逊卖家渴望的诉求&#xff0c;做…

外卖 点金推广实战课程,2024外卖 点金推广全流程(7节课+资料)

课程内容&#xff1a; 外卖点金推广实操课程 资料 01 1-了解外卖.mp4 02 第一节:点金推广的说明.mp4 03 第二节:如何降低点金推广的成本,mp4 04 第三节:如何计算点金推广的流速,mp4 05 第四节:如何提升点金的精准度,mp4 06 第五节:点金推广实操,mp4 07 点金推广高级教程…

0508GoodsContent的Maven项目

0508GoodsContent的Maven项目包-CSDN博客 数据库字段 页面需求

Electron学习笔记(三)

文章目录 相关笔记笔记说明 五、界面1、获取 webContents 实例&#xff08;1&#xff09;通过窗口对象的 webContent 属性获取 webContent 实例&#xff1a;&#xff08;2&#xff09;获取当前激活窗口的 webContents 实例&#xff1a;&#xff08;3&#xff09;在渲染进程中获…

kali更新镜像源

1. 什么是镜像源 镜像源一种数据存储和分发技术&#xff0c;通常指的是一个服务器或网站&#xff0c;它存储了另一个服务器或网站上的某些或全部内容的副本。 2. kali更新镜像源 1. 编辑镜像源文件 vi /etc/apt/sources.list 2. 将原来的镜像源用#号注释掉 3. 选择镜像源地址…

Ubuntu+Vscode使用Clangd进行项目代码跳转

文章目录 1. 环境介绍2. bear工具安装3. Clangd插件安装4. Clangd配置4.1方法一&#xff1a;扩展设置4.2 方法二&#xff1a;settings.json配置 5. Clangd常用配置参数介绍6. 总结 1. 环境介绍 Linux环境 笔者使用Ubuntu22.04.3 本文章以Windows下的Vscodessh到Ubuntu主机为例…

2023年数维杯国际大学生数学建模挑战赛B题棉花秸秆热解的催化反应解题全过程论文及程序

2023年数维杯国际大学生数学建模挑战赛 B题 棉花秸秆热解的催化反应 原题再现&#xff1a; 随着全球对可再生能源需求的不断增加&#xff0c;生物质能作为一种成熟的可再生能源得到了广泛的关注。棉秆作为一种农业废弃物&#xff0c;由于其富含纤维素、木质素等生物质成分&am…

Docker安装、使用及常用命令

一、Docker是什么&#xff1f; Docker是一种开源的容器化技术&#xff0c;允许开发者将应用及其运行环境打包在一个轻量级、可移植的容器中。这样&#xff0c;不论在开发、测试还是生产环境中&#xff0c;应用都能在任何Docker支持的平台上无缝运行。Docker使用Dockerfile来自…