Java-MySql:JDBC

news2025/1/18 9:51:20

目录

JDBC概述

JDBC搭建

1、导入mysql开发商提供的jar包

2、注册驱动

3、与数据库连接

注解: 

Statement:

代码 

运行

PreparedStatement:

代码

运行 

PreparedStatement和Statement 

Statement 

代码

运行

代码

运行

代码

运行

PreparedStatement 

代码

运行

代码

运行

代码

运行

PreparedStatement和Statement 区别

结果集处理

代码

运行

代码

运行

​编辑代码

运行


JDBC概述

jdbc(Java DataBase Connectivity)java语言连接数据库
本模块中,java提供了一组用来连接数据库的类和接口
java语言开发者,本身没有提供如何具体连接数据库的功能,只是定义了一组java程序连接数据库的访问接口。

1、连接到数据库

2、向数据库发送增删改这一类的sql

3、发送查询sql

java语言只需要定义连接数据库的接口,具体的实现交给了不同的数据库开发商

java只需要定义一套接口,就可以连接不同的接口

JDBC搭建

1、导入mysql开发商提供的jar包

2、注册驱动

两种方式:

1、反射方式加载驱动类
      Class.forName("com.mysql.cj.jdbc.Driver");

2 、DriverManager.registerDriver(new Driver());

3、与数据库连接

获得Satement执行sql语句

发送sql语句

关闭与数据库的连接

注解: 

url: jdbc:mysql://127.0.0.1:3306:(端口(3306))

      /schooldb(数据库名)

      ?serverTimezone=Asia/Shanghai" 

user:用户名(root)

password:密码

Statement:

代码 

package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo1 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        //2、注册驱动 
        DriverManager.registerDriver(new Driver());

        //3、建立与数据库的连接
        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);
        System.out.println(connection);//com.mysql.cj.jdbc.ConnectionImpl@25359ed8

        //发送sql
        Statement statement = connection.createStatement();
        System.out.println(statement);//com.mysql.cj.jdbc.StatementImpl@6166e06f
        statement.executeUpdate("insert into major(name)value ('数学')");

        //关闭与数据库的连接
        statement.close();
        connection.close();
    }
}

运行

PreparedStatement:

代码

package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class Demo3 {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {

        //2、注册驱动
        //反射方式加载驱动类
        //Class.forName("com.mysql.cj.jdbc.Driver");
        DriverManager.registerDriver(new Driver());

        //3、建立与数据库的连接
        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);

        //发送sql
        //? 占位符 表示要插入一个参数
        PreparedStatement ps = connection.prepareStatement("insert into major(name)value (?)");
        //1向第一个占位符的位置插入数据
        ps.setObject(1, "智能");
        ps.executeUpdate();
        //关闭与数据库的连接
        ps.close();
        connection.close();
    }
}

运行 

PreparedStatement和Statement 

Statement 

代码
 package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo2 {
    public static void main(String[] args) throws SQLException {
        Demo2.insert("元神启","动", "2018-8-23", "12345678910", 1.4);
    }

    public static void insert(String name,String gender,String birthday,String phone,double height) throws SQLException {
        //注册驱动
        DriverManager.registerDriver(new 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);
        //发送sql
        Statement statement = connection.createStatement();
        statement.executeUpdate("insert into student(name,gender,birthday,phone,height)value('"+name+"','"+gender+"','"+birthday+"','"+phone+"',"+height+")");
        //关闭与数据库的连接
        statement.close();
        connection.close();
    }
}
运行

代码
package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo2 {
    public static void main(String[] args) throws SQLException {
        Demo2.delete(6);
    }

    public static void delete(int number) throws SQLException {
        //注册驱动
        DriverManager.registerDriver(new 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);
        //发送sql
        Statement statement = connection.createStatement();
        //直接将字符串拼接到sql中,不能防止sql注入攻击"or 1=1"
        statement.executeUpdate("delete from student where number = "+number);
        //关闭与数据库的连接
        statement.close();
        connection.close();
    }
}
运行

代码
package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class Demo2 {
    public static void main(String[] args) throws SQLException {
        Demo2.update(3,"爱丽西娅","女", "2024-4-14", "123456789", 1.72);
    }

    public static void update(int number,String name,String gender,String birthday,String phone,double height) throws SQLException {
        //注册驱动
        DriverManager.registerDriver(new 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);
        //发送sql
        Statement statement = connection.createStatement();
        statement.executeUpdate("update student set name='"+name+"',gender='"+gender+"',birthday='"+birthday+"',phone='"+phone+"',height="+height+" where number ="+number);
        //关闭与数据库的连接
        statement.close();
        connection.close();
    }
}
运行

PreparedStatement 

代码
package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class Demo4 {
    public static void main(String[] args) throws SQLException {
        Demo4.insert("小姨","鹤", "2018-8-23", "123456789", 1.4);
    }

    public static void insert(String name,String gender,String birthday,String phone,double height) throws SQLException {
        //注册驱动
        DriverManager.registerDriver(new 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);
        //发送sql
        PreparedStatement ps = connection.prepareStatement("insert into student(name,gender,birthday,phone,height)value(?,?,?,?,?)");
        ps.setObject(1,name);
        ps.setObject(2,gender);
        ps.setObject(3,birthday);
        ps.setObject(4,phone);
        ps.setObject(5,height);
        ps.executeUpdate();
        //关闭与数据库的连接
        ps.close();
        connection.close();
    }
}
运行

代码
package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class Demo4 {
    public static void main(String[] args) throws SQLException {
        Demo4.delete(15);
    }

    public static void delete(int number) throws SQLException {
        //注册驱动
        DriverManager.registerDriver(new 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);
        //发送sql
        //封装sql
        PreparedStatement ps = connection.prepareStatement("delete from student where number = ?");
        //向sql中传参 传参时会进行验证,防止sql注入攻击,更安全
        ps.setObject(1, number);
        ps.executeUpdate();
        //关闭与数据库的连接
        ps.close();
        connection.close();
    }
}
运行

代码
package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class Demo4 {
    public static void main(String[] args) throws SQLException {
        Demo4.update(3,"申鹤","女", "2024-4-14", "12345678910", 1.72);
    }

    public static void update(int number,String name,String gender,String birthday,String phone,double height) throws SQLException {
        //注册驱动
        DriverManager.registerDriver(new 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);
        //发送sql
        PreparedStatement ps = connection.prepareStatement("update student set name=?,gender=?,birthday=?,phone=?,height=? where number =?");
        ps.setObject(1, name);
        ps.setObject(2, gender);
        ps.setObject(3, birthday);
        ps.setObject(4, phone);
        ps.setObject(5, height);
        ps.setObject(6, number);
        ps.executeUpdate();
        //关闭与数据库的连接
        ps.close();
        connection.close();
    }
}
运行

PreparedStatement和Statement 区别

1、代码的可读性和可维护性. 虽然用PreparedStatement来代替Statement会使代码多出几行,但这样的代码无 论从可读性还是可维护性上来说.都比直接用Statement的代码高很多档次。

2、最重要的一点是极大地提高了安全性.

     防止sql注入  

     Stringsql= “ delete from user where id = ”+num;   

     如果我们把[or 1=1]作为id传入进来?   

     delete from tb_name where id = 1 or 1 = 1;   

因为‘1’ = ‘1’肯定成立   

而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹 配的关系.

预编译模式中每个占位符处,只能插入一个值,而会过滤其他语句。

结果集处理

PreparedStatement和Statement中的executeQuery()方法中会返回一 个ResultSet对象,查询结果就封装在此对象中.

使用ResultSet中的next()方法获得下一行数据

使用getXXX(String name)方法获得值

package com.ffyc.jdbcpro;

import java.util.Date;

public class Student {
    private int number;
    private String name;
    private String gender;
    private Date birthday;
    private String phone;
    private double height;
    private Date ref_time;

    public int getNumber() {
        return number;
    }

    public void setNumber(int number) {
        this.number = number;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getGender() {
        return gender;
    }

    public void setGender(String gender) {
        this.gender = gender;
    }

    public Date getBirthday() {
        return birthday;
    }

    public void setBirthday(Date birthday) {
        this.birthday = birthday;
    }

    public String getPhone() {
        return phone;
    }

    public void setPhone(String phone) {
        this.phone = phone;
    }

    public double getHeight() {
        return height;
    }

    public void setHeight(double height) {
        this.height = height;
    }

    public Date getRef_time() {
        return ref_time;
    }

    public void setRef_time(Date ref_time) {
        this.ref_time = ref_time;
    }

    @Override
    public String toString() {
        return "Student{" +
                "number=" + number +
                ", name='" + name + '\'' +
                ", gender='" + gender + '\'' +
                ", birthday=" + birthday +
                ", phone='" + phone + '\'' +
                ", height=" + height +
                ", ref_time=" + ref_time +
                '}';
    }
}

代码

package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class Demo5 {
    public static void main(String[] args) throws SQLException {
        Student student = Demo5.findStudentByNumber(16);
        System.out.println(student);
    }

    public static Student findStudentByNumber(int number) throws SQLException {
        DriverManager.registerDriver(new 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 number,name,gender,birthday,height,phone,reg_time from student where number = ?");
        ps.setObject(1, number);
        //执行查询后,mysql将数据封装到一个ResultSet对象中
        ResultSet rs = ps.executeQuery();
        System.out.println(rs);//com.mysql.cj.jdbc.result.ResultSetImpl@64d2d351
        //将ResultSet中的数据包装到自己的对象中,这样用起来更加方便
        //结果集中有没有数据 如果有返回true,否则返回false
        Student stu = new Student();
        while (rs.next()){
            stu.setNumber(rs.getInt("number"));
            stu.setName(rs.getString("name"));
            stu.setGender(rs.getString("gender"));
            stu.setBirthday(rs.getDate("birthday"));
            stu.setHeight(rs.getDouble("height"));
            stu.setPhone(rs.getString("phone"));
            stu.setRef_time(rs.getTimestamp("reg_time"));

        }
        return stu;
    }
}

运行

代码

package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;
import java.util.ArrayList;

public class Demo6 {
    public static void main(String[] args) throws SQLException {
        ArrayList<Student> students = findStudent();
        System.out.println(students);
    }
    public static ArrayList<Student> findStudent() throws SQLException {
        DriverManager.registerDriver(new 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 number,name,gender,birthday,height,phone,reg_time from student");
        ResultSet rs = ps.executeQuery();
        //创建一个集合对象用来封装多个学生对象
        ArrayList<Student> students = new ArrayList<>();
        while (rs.next()){
            //每循环一次,创建一个学生对象
            Student stu = new Student();
            stu.setNumber(rs.getInt("number"));
            stu.setName(rs.getString("name"));
            stu.setGender(rs.getString("gender"));
            stu.setBirthday(rs.getDate("birthday"));
            stu.setHeight(rs.getDouble("height"));
            stu.setPhone(rs.getString("phone"));
            stu.setRef_time(rs.getTimestamp("reg_time"));
            //把当前学生对象返回到集合中
            students.add(stu);
        }
        return students;
    }
}

运行

代码

package com.ffyc.jdbcpro;

import com.mysql.cj.jdbc.Driver;

import java.sql.*;

public class Demo7 {
    public static void main(String[] args) throws SQLException {
        int res = checkNum(16);
        System.out.println(res);

    }

    public static int checkNum(int number) throws SQLException {
        DriverManager.registerDriver(new 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 count(*) c from student where number = ?");
        ps.setObject(1, number);
        ResultSet resultSet = ps.executeQuery();
        if(resultSet.next()){
            return resultSet.getInt("c");
        }else{
            return 0;
        }
    }
}

运行

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

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

相关文章

Android:OkHttp网络请求框架的使用

目录 一&#xff0c;OkHttp简介 二&#xff0c;OkHttp请求处理流程 三&#xff0c;OkHttp环境配置 四&#xff0c;OkHttp的使用 1.get网络请求 2.post上传表单数据 3.post上传json格式数据 4.文件上传 5.文件下载 一&#xff0c;OkHttp简介 OkHttp是square公司推出的一…

docker安装git

一、安装Gitlab 1.搜索影像 2.下载影像 3.启动Git服务 4.查看Gitlab是否已经启动 二、配置Gitlab 1.首先&#xff0c;先进入容器 2.修改gitlab.rb文件 3.修改gitlab.rb文件中的IP与端口号 3.配置gitlab.yml文件 4.重启服务 5.退出命令行&#xff0c;推出容器命令 6.使用浏览器打…

【线性回归】梯度下降

文章目录 [toc]数据数据集实际值估计值 梯度下降算法估计误差代价函数学习率参数更新 Python实现导包数据预处理迭代过程结果可视化完整代码 结果可视化线性拟合结果代价变化 数据 数据集 ( x ( i ) , y ( i ) ) , i 1 , 2 , ⋯ , m \left(x^{(i)} , y^{(i)}\right) , i 1 ,…

TransFormer学习之VIT算法解析

1.算法简介 本文主要对VIT算法原理进行简单梳理&#xff0c;下图是一个大佬整理的网络整体的流程图&#xff0c;清晰明了&#xff0c;其实再了解自注意力机制和多头自注意力机制后&#xff0c;再看VIT就很简单了 受到NLP领域中Transformer成功应用的启发&#xff0c;ViT算法尝…

Linux远程登录方式ssh与vnc的区别

ssh登录 ssh是基于非对称密钥加密登录服务器 vnc登录 vnc登录相当于Linux图形界面的方式登录 为什么需要多种登录方式 在ssh无法远程登录时&#xff0c;可以使用vnc登录。新安装的虚拟机不一定会安装或启用ssh服务&#xff0c;并且要实现ssh的远程登录&#xff0c;linux防…

字符串的定义和操作 继续!

字符串的定义和操作 1&#xff09;定义 与列表、元组一样&#xff0c;字符串也可以通过下标进行访问 从前向后&#xff0c;下标从0开始 从后向前&#xff0c;下标从-1开始 my_str "green" # 通过下标索引取值 value my_str[0] value2 my_str[-5] print(f&quo…

k8s pv 一直是release状态

如下图所示&#xff0c;pv 一直是release状态 这个时候大家可能就会想到现在我的 PVC 被删除了&#xff0c;PV 也变成了 Released 状态&#xff0c;那么我重建之前的 PVC 他们不就可以重新绑定了&#xff0c;事实并不会&#xff0c;PVC 只能和 Available 状态的 PV 进行绑定。…

什么是谷歌爬虫?

其实就是谷歌用来浏览网络信息的一个自动化程序&#xff0c;他们会在你的网站爬取&#xff0c;寻找和搜集信息&#xff0c;谷歌爬虫可以说决定着一个网站在谷歌的生死 谷歌爬虫的作用机制就在于发现新网站以及新网页&#xff0c;然后他会把网页的内容带回去&#xff0c;更新到…

嵌入式科普(18)Ubuntu在移动硬盘的安装和启动

目录 一、概述 二、应用场景 三、移动硬盘安装Ubuntu 3.1 移动硬盘格式化 3.2 VMware安装Ubuntu到移动硬盘 四、电脑BIOS启动移动硬盘Ubuntu 五、从VMware启动移动硬盘Ubuntu 六、问题解决(坑)和思考提问 嵌入式科普(18)Ubuntu在移动硬盘的安装和启动 一、概述 在移动硬…

Thingsboard规则链:Entity Type Filter节点详解

在物联网&#xff08;IoT&#xff09;的世界里&#xff0c;数据的多样性与复杂性要求处理架构具备高度的灵活性和针对性。ThingsBoard作为一款强大的物联网平台&#xff0c;通过其规则链&#xff08;Rule Chains&#xff09;机制&#xff0c;让数据的自动化处理变得既强大又灵活…

设计模式7——建造者模式

写文章的初心主要是用来帮助自己快速的回忆这个模式该怎么用&#xff0c;主要是下面的UML图可以起到大作用&#xff0c;在你学习过一遍以后可能会遗忘&#xff0c;忘记了不要紧&#xff0c;只要看一眼UML图就能想起来了。同时也请大家多多指教。 建造者模式&#xff08;Builde…

C++下的内存管理

文章目录 内存分布C语言中动态内存管理方法C内存管理new/delete操作内置类型new和delete操作自定义类型operator new 和 operator deletenew和delete的实现原理定位new表达式 malloc/free和new/delete的区别内存泄漏 内存分布 栈&#xff1a;又叫做堆栈–非静态局部变量/函数参…

Sketch v100 for Mac 安装教程【支持M芯片】

Sketch v100 for Mac 安装教程【支持M芯片】 原文地址&#xff1a;https://blog.csdn.net/weixin_48311847/article/details/139104315

秀某动预约抢票脚本

秀某动预约抢票脚本 小白操作-仅供学习参考 主要流程和功能 初始化和配置变量: confirm_url 和 login_url: 分别存储登录和确认订单的URL。 wait_time: 用户输入的提前多少秒开始执行。 start_time: 开售时间。 DEBUG: 调试标志&#xff0c;用于控制脚本的行为。 浏览…

4. C++入门:内联函数、auto关键字、范围for及nullptr

内联函数 概念 以inline修饰的函数叫做内联函数&#xff0c;编译时C编译器会在调用内联函数的地方展开&#xff0c;没有函数调用建立栈帧的开销&#xff0c;内联函数提升程序运行的效率 对比C的宏 C语言不足&#xff1a;宏 #define ADD(x, y) ((x)(y))int main() {int ret…

Spring框架中获取方法参数名称:DefaultParameterNameDiscoverer

DefaultParameterNameDiscoverer 是Spring框架中用于获取方法参数名称的一个类。在Java中&#xff0c;方法的参数名称通常在编译时会丢失&#xff0c;因为Java字节码并不强制要求保留这些信息。Spring提供了一种机制来恢复这些参数名称&#xff0c;这就是通过DefaultParameterN…

工厂模式(简单工厂模式+工厂模式)

工厂模式的目的就是将对象的创建过程隐藏起来&#xff0c;从而达到很高的灵活性&#xff0c;工厂模式分为三类&#xff1a; 简单工厂模式工厂方法模式抽象工厂模式 在没有工厂模式的时候就是&#xff0c;客户需要一辆马车&#xff0c;需要客户亲自去创建一辆马车&#xff0c;…

javaSwing仓库商品管理系统(文档+视频+源码)

摘要 Java swing实现的一款简单的仓库商品管理系统&#xff0c;数据库采用的是mysql&#xff0c;本系统实现了两个角色层面的功能&#xff0c;管理员可以管理用户、仓库、商品信息等。普通用户登录后可以查看商品、仓库信息及个人信息。 系统实现 登录界面&#xff1a; 我们…

MySQL中锁的几种类型

MySQL根据加锁的范围&#xff0c;可以分为全局锁、表级锁、行级锁三类。 2.5.1. 锁定读 2.5.1.1. 共享锁和独占锁 事务的 读-读 情况并不会引起什么问题&#xff0c;对于 写-写、读-写 或 写-读 这些情况可能会引起一些问题&#xff0c;需要使用MVCC或者加锁的方式来解决。在…

ubuntu server 22.04 使用docker安装 onlyoffice 8.0同时添加中文字体、字号

本文主要介绍在ubuntu server 22.04 系统上使用docker安装onlyoffice 8.0同时添加中文字体、字号方法。 1、硬件要求 CPU&#xff1a;双核2 GHz或更高 内存&#xff1a;最少4GB 硬盘&#xff1a;至少40 GB可用空间 Swap file&#xff1a;至少4 GB&#xff0c;但取决于主机操作…