JDBC

什么是JDBC?JDBC的作用是什么? JDBC是Java数据库连接(Java Database Connectivity)的简称,它是一套用于执行SQL语句的Java API。 JDBC的作用在于为Java程序提供了一个标准化的接口,用于访问和操作各种关系型数据库。通过JDBC,开发者可以使用Java语言编写的程序来连接数据库,执行查询、更新、删除等操作,而无需关心底层数据库的具体实现细节。 阅读详情

1、JDBC

JDBC全称为:Java DataBase Connectivity(java数据库连接)。
SUN公司为了简化、统一对数据库的操作,定义了一套Java操作数据库的规范,称之为JDBC。程序通过JDBC API连接到关系数据库,并使用结构化查询语句,完成对数据库的查询,更新等操作。
这里写图片描述

2、JDBC驱动程序

应用程序直接与JDBC相连接,数据库驱动程序把jdbc调用映射成特定的数据库。
大部分数据库系统都有相应的JDBC驱动程序,当需要某个连接时,必须有相应的数据库驱动。
Java数据库连接体系结构是用于Java应用程序连接数据库的标准方法。JDBC对Java程序员而言是API,对实现与数据库连接的服务提供商而言是接口模型。作为API,JDBC为程序开发提供标准的接口,并为数据库厂商及第三方中间件厂商实现与数据库的连接提供了标准方法。JDBC使用已有的SQL标准并支持与其它数据库连接标准,如ODBC之间的桥接。JDBC实现了所有这些面向标准的目标并且具有简单、严格类型定义且高性能实现的接口。

3、JDBC使用流程

1、通过DriverManager加载驱动程序driver;

第一种方式:基本不使用的方式

DriverManager.registerDriver(new com.mysql.jdbc.Driver());

使用这种方式:registerDriver方法在mysql驱动中已经调用过了. 如果我们也调用相当于创建了两个驱动对象
第二种方式:常用的方式。
通过反射获取包名,不仅没有重复注册,而且容易修改包名。

Class.forName("com.mysql.jdbc.Driver");

2、通过DriverManager类获得表示数据库连接的Connection

Connection  conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "123456");

获取连接的url
jdbc协议:数据库协议[:数据库的子协议]://主机名:端口号/库名?参数键1=参数值1&参数键2=参数值2

类对象;

3、通过Connection对象绑定要执行的语句,生成Statement类对象;

4、执行SQL语句,接收执行结果集ResultSet;

将查询(select语句)结果封装到resultSet对象中返回

    Statement st = conn.createStatement();
    //获得result对象
    String sql = "select * from emp;";
    // 执行sql语句获得
    ResultSet rs = st.executeQuery(sql);

5、可选的对结果集ResultSet类对象的处理;

可以滚动的结果集.
resultset中的游标不仅仅可以通过next方法向下移动.也可任意移动位置.
例如以下方法:

rs.afterLast();//移动到最后一个之后
rs.previous();//游标向上移动一个
rs.absolute(1);//直接将游标移动到指定行
rs.beforeFirst();//移动到第一个之前
rs.first();//让游标移动到第一行

6、关闭资源(ResultSet、Statement和Connection)

保证 3个对象都要被释放掉resultset,statement,connection

try {
            if(rs!=null){
                rs.close();
            }
        } catch (Exception e) {
        }finally{
            try {
                if(st!=null){

                    st.close();
                }
            } catch (Exception e2) {
            }finally{
                try {
                    if(conn!=null){
                        conn.close();
                    }
                }catch (Exception e3) {
                }
            }
        }
    }

示例一:查询

package com.example.jdbc;

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

import org.junit.Test;

public class MyTest {
    @Test
    public void jdbcTest() throws Exception{
//      1、导包 
//      2、注册驱动 
        Class.forName("com.mysql.jdbc.Driver");
//      3、获得连接
        Connection  conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/student", "root", "123456");
//      4、发送sql语句
        Statement state = conn.createStatement();
        String sql = "select * from  t_student;";

        ResultSet rs=state.executeQuery(sql);

        while(rs.next()){
            String name = rs.getString("name");
            System.out.println(name);
        }

//      5、释放资源
        rs.close();
        state.close();
        conn.close();
    }
}

示例二:插入

@Test
    public void jdbcTest2() throws Exception {
        // 1、导包
        // 2、注册驱动
        Class.forName("com.mysql.jdbc.Driver");
        // 3、获得连接
        Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/student", "root", "123456");
        // 4、发送sql语句
        Statement state = conn.createStatement();
        // String sql =
        // "INSERT INTO `t_student`(`id`,`name`,`number`,`age`,`class`)VALUES('5','yu','10005',24,'数学');";
        String sql = "INSERT INTO `t_student`(`NAME`,`number`,`age`,`class`)VALUES('tom4','1005',35,'英语');";
        Boolean rs = state.execute(sql);

        System.out.println(rs);// false表示插入成功

        // 5、释放资源
        state.close();
        conn.close();
    }

2、sql注入攻击

在以前开发中,登陆的逻辑是将用户提交的用户名和密码,拼接到sql语句中进行查询

如果查询成功,则表示用启登陆成功。

如果一些用户明白sql语句,那么就可以用一些特殊语句完成登陆的匹配条件

在数据库中创建两个用户名和密码
这里写图片描述
当用户提交用户名和密码的时候,sql语句的拼接如下

SELECT * FROM t_user WHERE NAME='yu' AND PASSWORD='123456';

但是如果用户提交的用户名是’yx’OR 1=1,密码123456时
就把这两条数据都查询出来了,也就表示都登陆了
代码如下

    //sql注入的示例;
    @Test
    public void jdbcTest4() throws Exception {
        Class.forName("com.mysql.jdbc.Driver");

        Connection conn = DriverManager.getConnection("jdbc:mysql:///student",
                "root", "123456");

        Statement state = (Statement) conn.createStatement();
        String name = "yu' OR 1=1 -- ";

        String sql = "SELECT * FROM t_user WHERE NAME='"+name+"' and password='123456' ;";

        ResultSet re = (ResultSet) state.executeQuery(sql);

        while (re.next()) {
            String n = re.getString("name");
            String pa= re.getString("password");
            System.out.println("name  " + n + "    password   " + pa);
        }
        re.close();
        state.close();
        conn.close();

    }

打印结果

name yxg age 123456
name yu age 123456

为了防止出现这样的情况在jdbc中提供这样一个对象,防止用户直接参数sql语句的拼接:预编译的PrepareStatement对象。

而如果你使用预编译语句.你传入的任何内容就不会和原来的语句发生任何匹配的关系.只要全使用预编译语句,你就用不着对传入的数据做任何过虑.

PreparedStatement 实例包含已编译的 SQL 语句。这就是使语句“准备好”。包含于 PreparedStatement 对象中的 SQL 语句可具有一个或多个 IN 参数。IN参数的值在 SQL 语句创建时未被指定。相反的,该语句为每个 IN 参数保留一个问号(“?”)作为占位符。每个问号的值必须在该语句执行之前,通过适当的setXXX 方法来提供。

    //sql注入解决办法示例;

    @Test
    public void jdbcTest5() throws Exception {
        Class.forName("com.mysql.jdbc.Driver");

        Connection conn = DriverManager.getConnection("jdbc:mysql:///student",
                "root", "123456");
        String sql = "select * from t_user where name=? and password='123456' ;";

        PreparedStatement pst = conn.prepareStatement(sql);
        //String name = "yu' OR 1=1";
        String name = "yu";
        pst.setString(1, name);

        ResultSet rs = pst.executeQuery();


        while(rs.next()){
            String n = rs.getString("name");
            String pass=rs.getString("password");
            System.out.println(n+"---"+pass);
    }
        rs.close();
        pst.close();
        conn.close();

    }
11、基于STM32的智能药盒 当今时代是一个新技术层出不穷的时代,在电子领域尤其是自动化智能控制领域,传统的分立元件或数字逻辑电路构成的控制系统,正以前所未有的速度被单片机智能控制系统所取代。嵌入式具有体积小、功能强、成本低、应用面广等优点,可以说,智能控制与自动控制的核心就是单片机。 阅读详情

相关推荐

Frigate进阶玩法:如何用MQTT和Python脚本扩展你的自定义目标检测算法

本文详细介绍了如何通过MQTT和Python脚本扩展Frigate的自定义目标检测算法,无需修改源码即可实现特殊场景(如工业设备异常、农业病虫害识别)的高效检测。文章涵盖Frigate配置、外部检测服务构建、高级集成技巧及性能优化实践,帮助开发者灵活扩展智能监控能力。

weixin_42662293的博客 350

JDBC五种连接方式详解

JDBC(Java DataBase Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。一、JDBC是什么?1.1、JDBC(Java Database Connectivity)是一个独立于特定数据库管理系统、通用的SQL数据库存取和操作的公共接口(一组API),定义了用来访问数据库的标准Java类库,()使用这些类库可以以一种标准的方法、方便地访问数据库资源。

qq_55004830的博客 4079

算法面经手撕系列(2)--手撕BatchNormlization

手动实现/手撕BatchNormlization

罟霖同学的站点 865

JDBC(数据库连接)

JDBC 简介 什么是 JDBC? JDBC 指 Java 数据库连接,是一种标准Java应用编程接口( JAVA API),用来连接 Java 编程语言和广泛的数据库。 JDBC API 库包含下面提到的每个任务,都是与数据库相关的常用用法。 制作到数据库的连接。 创建 SQL 或 MySQL 语句。 执行 SQL 或 MySQL 查询数据库。 查看和修改所产生的记录。 从根本上来说,JDBC 是一种规范,它提供了一套完整的接口,允许便携式访问到底层数据库,

LLCY_XSY的博客 953

从Live2D到Unreal Engine:2D与3D虚拟数字人核心技术实现路径解析

本文深入解析了从Live2D到Unreal Engine的2D与3D虚拟数字人核心技术实现路径,涵盖技术选型、制作流程与优化技巧。通过对比2D骨骼动画与3D建模渲染的差异,结合实战案例,帮助开发者根据项目需求选择合适方案,提升虚拟数字人的交互体验与视觉效果。

weixin_30379531的博客 149

jmeter5.4.1 使用案例

jmeter主要用于接口压力测试,模拟海量请求并发访问接口 1.下载jmeter https://jmeter.apache.org/download_jmeter.cgi 2.启动jemter 双击即可 3.配置jmeter 1.先更改语言 2.创建线程组 配置线程执行规划 3.创建http请求默认值 4.创建http请求 5.创建http信息头管理器 指定 Content-Type:application/json 6.创建响应断言 7.创建察看结果数 直接点击 执行 按.

SpringHASh的博客 1221

JDBC 连接 MySQL

JDBC 是 Java DataBase Connectivity (Java 数据连接)技术的简称,是一种可用于执行SQL 语句的 Java API。它由一些 java 语言编写的类和接口组成;程序员通过使用 jdbc 可以方便地将 SQL 语句传送给几乎任何一种数据库。......

程序猿追的博客 11万+

嵌入式Linux网络调试:YT8531/YT8521 PHY驱动移植与设备树配置避坑指南

本文深入解析嵌入式Linux系统中YT8531/YT8521 PHY驱动移植与设备树配置的关键技术,涵盖内核驱动适配、RGMII接口时序调整及常见问题排查。针对Motorcomm千兆以太网PHY芯片,提供详细的设备树配置示例和调试技巧,帮助开发者规避典型设计陷阱,确保网络功能稳定运行。

weixin_42525632的博客 673

JDBC连接数据库步骤

JDBC连接数据库步骤

onebeautifulman的博客 1万+

【Docker】掌握 Docker魔法:Windows 11 平台上的完美容器部署终极指南

【Docker】掌握 Docker魔法:Windows 11 平台上的完美容器部署终极指南 一文搞懂什么是 Docker?分析容器的工作原理、容器的架构、Docker的优势、使用 Docker的原因。 全程手把手教你Docker的安装与使用,配置阿里云镜像加速、容器常用命令!

寸铁的博客 10万+

logisim计组实验八 乘法器

原理:点这里 有问题欢迎留言哦~ 文章目录五位阵列乘法器电路图时间延迟分析六位补码阵列乘法器五位无符号乘法流水线原理图电路图原码一位乘法器原理图电路图补码一位乘法器 五位阵列乘法器 电路图 此处注意:全加器FA的cout端是进位端而非输出端 使用硬件控制比循环累加的速度快得多。 但是存在串行进位链 改进版: 时间延迟分析 T是计算相加数的一级门延迟 3n–>2n 性能差别在1.5倍 ...

treblez's blog 2万+

JDBC连接步骤

第一步:在项目中新建一个名称叫lib的文件夹,然后将下载的MySQL连接jar包存入到这个lib文件夹中并配置环境。第二步:编写代码,连接数据库并操作数据库中某个表里的数据。④:编写配置文件db.properties。③:编写一个DB工具类。

lmdbhf的博客 2077

powerdesigner导出sql将name放到comment注释上

【代码】powerdesigner导出sql将name放到comment注释上。

weixin_45947759的博客 1352

jdbc

文章目录一,什么是JDBC二,JDBC的原理三,程序员,JDBC,JDBC驱动的关系及说明四,JDBC的总结五,JDBC连接数据的步骤六,JDBC连接数据的详细步骤 一,什么是JDBC JDBC(Java DataBase Connectivity)就是Java数据库连接,说白了就是用Java语言来操作数据库。原来我们操作数据库是在控制台使用SQL语句来操作数据库,JDBC是用Java语言向数据库发送SQL语句。 二,JDBC的原理 早期SUN公司的天才们想编写一套可以连接天下所有数据库的API,但是当他

qq_43623447的博客 2万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

JDBC是什么

JDBC(Java Database Connectivity, Java 数 据 库 连 接)是 一 种可用于执行 SQL 语句的 Java API(Application Programming Interface, 应用程序设计接口)。它由一些 Java 语言编写的类和接口组成。JDBC 为数据库应用开发人员、数据库前台开发人员提供了一种标准的应用程序设计接口, 使开发人员可以用纯 Java 语言编写完整的数据库应用程序。

顺其自然~专栏 2万+

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

JDBC概述(什么是JDBC?JDBC的原理、Mysql和Sql Server入门JDBC操作)

本篇文章主要介绍JDBC概述(什么是JDBC?JDBC的原理、Mysql和Sql Server入门JDBC操作)简单入门知识以及部分理论知识 JDBC是Java Database Connectivity的缩写 是一种用于Java程序访问关系型数据库的API(应用程序接口)。 1. Java语言的跨平台性:JDBC可以在各种操作系统和计算机体系结构上运行,这使得使用Java开发的应用程序可以方便地与不同类型的数据库进行交互。 2. 标准化:JDBC是一个标准化的API,提供了一致的访问关系数据库的方法,使

Jin_Xiang123的博客 1万+

JDBC | JDBC快速入门

本文讲解了JDBC的基础代码,帮助大家可以快速上手JDBC,感受JDBC的使用过程

BoBooY的Java学习笔记 1785

JDBC详解——JDBC常用接口

JDBC: JDBC的全称是Java Database Connectivity,即Java数据库连接,它是一种可以执行SQL语句的Java API。程序可以通过JDBC API连接到关系数据库,并使用结构化查询语言(SQL,数据库标准的查询语言)来完成对数据库的查询和更新。 JDBC执行事件: 建立与数据库的连接; 执行SQL语句; 获得SQL语句的执行结果。 JDBC驱动程序: ...

threelifeadv的博客 8112

Spring JDBC - Spring JDBC模版使用

Spring JDBC模版;Spring JDBC支持类

weixin_52937170的博客 1580

Java数据库连接—JDBC(JDBC详解、JDBC控制事务、C3P0连接池、Druid连接池、Spring JDBC-JDBC Template)

互联网大厂比较喜欢的人才特点:对技术有热情,强硬的技术基础实力;主动,善于团队协作,善于总结思考。无论是哪家公司,都很重视高并发高可用技术,重视基础,所以千万别小看任何知识。面试是一个双向选择的过程,不要抱着畏惧的心态去面试,不利于自己的发挥。同时看中的应该不止薪资,还要看你是不是真的喜欢这家公司,是不是能真的得到锻炼。其实我写了这么多,只是我自己的总结,并不一定适用于所有人,相信经过一些面试,大家都会有这些感触。下面有部分截图希望能对大家有所帮助。

2401_84003809的博客 993

JDBC原理&浅析HIVE-JDBC

目录 {:toc} 什么是JDBC? JDBC是Java DataBase Connectivity的缩写,它是Java程序访问数据库的标准接口。Java8 JDBC API 使用Java程序访问数据库时,Java代码并不是直接通过TCP连接去访问数据库,而是通过JDBC接口来访问,而JDBC接口则通过JDBC驱动来实现真正对数据库的访问。 例如,我们在Java代码中如果要访问MySQL,那么必须编写代码操作JDBC接口。注意到JDBC接口是Java标准库自带的,所以可以直接编译。而具体的JDBC驱动是.

梦境迷离 3583

JDBC总结——JDBC工具类

文章目录JDBC工具类一、JDBC工具类概述1、定义JDBC工具类的目的2、封装的操作二、JDBC工具类的封装1、dbcp.properties2、JdbcUtil3.java3、JdbcTemplate.java JDBC工具类 一、JDBC工具类概述 1、定义JDBC工具类的目的 每次使用JDBC的时候都要书写冗长的代码段,不符合复用的理念,于是要单独写一个类,将通用的JDBC操作写到一个类...

weixin_44157233的博客 1931

JDBC是什么?JDBC连接Mysql完整操作案例

是Java平台下用于数据库连接和操作的标准API,是一套接口和类的集合,它是由Sun Microsystems公司(现已被Oracle公司收购)最早提出的,目的是让Java应用程序能够与各种数据库系统进行交互。通过JDBC,Java程序员可以使用统一的接口来执行SQL语句、处理结果集,并与关系型数据库管理系统(RDBMS)进行通信。

wangyufei0815的博客 1257

JDBC版本简介

JDBC 版本是 JDBC 软件的发布,在 JDK 实现中有多个可用的 JDBC 版本。JDBC 目前的稳定版本是 4.3,发布于2017 年 9 月21日,版本 4.3 是一个稳定的版本,这意味着我们可以使用此版本实现 API 软件。第一个版本于1997年发布,其版本名称为JDBC 1.2,这是JDBC的第一个稳定版本。在发布版本 1.2 之后,许多稳定版本在 JDK 实现中发布,JDBC 4.0 及更高版本都支持 java SE 环境。

allway2的博客 3165

【JDBC上篇】什么是JDBC

既然是一套接口,接口都有调用者和实现者,面向接口调用,面向接口写实现类,都属于面向接口编程。面向接口编程的优势是解耦合,降低程序的耦合度,提高程序的扩展力。数据库的驱动大多以jar包的形式存在,解压后得到很多class文件,这些class文件就是对JDBC接口的实现,驱动由各大数据库厂家提供。getString方法传入列名的时候,传入的是查询结果集的列名。getString方法可以传入列的下标(JDBC中下标从1开始),也可以传入列名,但后者更加健壮。实际开发中,不要把数据库的信息写死在Java程序中。

llg___的博客 781

JDBC概述

JDBC是一种可用于执行SQL语句的JavaAPI,是连接数据库和Java应用程序的纽带。 一、JDBC-ODBC桥 JDBC-ODBC桥是一个JDBC驱动程序,完成了从JDBC操作到ODBC操作之间的转换工作,运行JDBC驱动程序被用作ODBC的驱动程序。使用JDBC-ODBC桥连接数据库的步骤如下: 1、先加载JDBC-ODBC桥的驱动程序。代码如下: Class.forNam...

为你灯明三千的博客 784
上一篇: MySql二(多表关系和操作)
下一篇: MySql三(数据库连接池)
android_xiaogang
博客等级 码龄12年 89粉丝 142原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值