IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> 大数据 -> 【学习笔记】JDBC:常用接口|SQL注入|批处理 -> 正文阅读

[大数据]【学习笔记】JDBC:常用接口|SQL注入|批处理

JDBC:常用接口|SQL注入|批处理

Driver接口

  • Driver接口由数据库厂家提供,对于java开发者而言,只需要使用Driver接口就可以了。

  • 在编程中要连接数据库,必须先装载特定厂商的数据库驱动程序。不同的数据库有不同的装载方法。

  • 驱动:就是各个数据库厂商实现的Sun公司提出的JDBC接口。即对Connection等接口的实现类的jar文件。

  • 装载MySQL驱动:

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

    • 较新的版本应该要写这个:

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

Connection接口

  • Connection与特定数据库的连接(会话),在连接上下文中执行SQL语句并返回结果。

  • DriverManager的getConnection()方法建立在JDBC URL中定义的数据库Connection连接上。

  • 连接MySQL数据库:

    • Connection conn = DriverManager.getConnection("jdbc:mysql://host:port/database","user","password");

    • 在实际写的时候要修改对应字段,如:

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

Statement接口

  • 用于执行静态SQL语句并返回它所生成结果的对象。

  • 三种Statement类:

    • Statement:

      • 由createStatement创建,用于发送简单的SQL语句(不带参数的)。在这里插入图片描述

      • statement的缺点:

        • ①当SQL语句中要用到变量时,对于字符串的拼接上比较麻烦,如

        在这里插入图片描述

        这样是不行的。

        在这里插入图片描述

        必须要这样写:

        在这里插入图片描述

        是可以正确执行的。

        • ②不能防止SQL注入的问题。

        什么叫SQL注入,比如,我们执行一个删除操作:

        在这里插入图片描述

        但是,在实际过程中,这个id=5一般是由外界传过来的一个参数:

        在这里插入图片描述

        如果在这个外界传入的字符串中,进行恶意的书写,例如:

        在这里插入图片描述

        这样一执行完,我们表中的数据就都没有了。

        这就是SQL注入的一个威胁。

        所以在实际开发中一般不会使用statement。

    • PreparedStatement:

      • 继承自Statement接口,由prepareStatement创建,用于发送含有一个或多个输入参数的sql语句。PreparedStatement对象比Statement对象的效率更高,并且可以防止SQL注入。我们一般都用PreparedStatement。

      • 在这里插入图片描述

        它在写sql语句的时候,不像原来那样,要么把写好的字符串传到字段值上,要么通过外界传参传入,而是使用“?”占位符。这样一来,可以避免字符串拼接时的麻烦,也可以防止SQL注入的问题。

        我的占位符在这写好后,要传参进来的时候,就必须是个字符串、时间等等,你写"or 1=1"这样的语句,它有一个预处理的机制,就传不进来。

      • 在这里插入图片描述

        那么如何向占位符处传入参数呢?比如此处的username、pwd都是字符串,于是可以使用setString()方法。(如果参数是日期、int、double等其他类型,请对应于相应的其他方法)

        其中第一个参数为“第几个占位符”(即占位符的索引值,是由1开始,而不是0),第二个参数即为你想向那个占位符处传递的数据。

      • 最后再用execute()执行一下:

        在这里插入图片描述

        在这里插入图片描述

      • 如果觉得setString()方法,还需要先看看你的参数应该是什么类型,再采取相对应的方法,太麻烦的话,你可以直接统统使用setObject()方法。

        在这里插入图片描述

        在这里插入图片描述

  • CallableStatement:

    • 继承自PreparedStatement。由方法prePareCall创建,用于调用存储过程
  • 常用的Statement方法:

    • execute():运行语句,返回是否有结果集。

    • executeQuery():运行select语句,返回ResultSet结果集。

      • Result结果集是什么意思?

        在这里插入图片描述

        在这里插入图片描述

        调用executeQuery()方法,返回一个ResultSet类型的结果集的数据,可以通过类似于迭代器的方法对其操作:

        在这里插入图片描述

        在这里插入图片描述

        此处不写select * from 是想表达,还可以对每一条记录的某几个列进行操作。

        以上也就是ResultSet的一个经典的使用场景。

    • executeUpdate():运行insert/update/delete操作返回更新的行数。

  • 注意最后你的Connection一定要关闭。(后开的先关)

    [或者在try…catch…finally…的finally代码段里写。]

    在这里插入图片描述

不止Connection,你的ResultSet、Statement都需要.close();

遵循:ResultSet --> Statement --> Connection这样的关闭顺序。(后开的先关么)

如果是用try…catch…,一定要将三个try…catch…块分开写。

批处理

Batch

对于大量的批处理,建议使用Statement,因为PreparedStatement的预编译空间有限,当数据量特别大时,会发生异常。

批处理就是,一次将一堆sql语句,成批次地执行。比如需要一次插入两万条数据、十万条数据,这时使用批处理,可以大大提高效率。

在这里插入图片描述

在这里插入图片描述

可以看到只耗时两秒多,就插入了两万条数据。

在这里插入图片描述

查看一下。确实插入了两万条。(注意右下角可以翻页)

注意用的时候:

①把JDBC改为手动提交。

②尽量使用Statement。(也不是不能用其他的,只是这个更加地不会报异常)

  大数据 最新文章
实现Kafka至少消费一次
亚马逊云科技:还在苦于ETL?Zero ETL的时代
初探MapReduce
【SpringBoot框架篇】32.基于注解+redis实现
Elasticsearch:如何减少 Elasticsearch 集
Go redis操作
Redis面试题
专题五 Redis高并发场景
基于GBase8s和Calcite的多数据源查询
Redis——底层数据结构原理
上一篇文章      下一篇文章      查看所有文章
加:2021-12-10 11:07:42  更:2021-12-10 11:09:08 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 11:11:57-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码