026_JDBC
JDBC简介
JDBC(Java DataBase Connectivity,Java数据库连接)是一种用于执行SQL语句的Java API,
可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成。JDBC提供了一种基准,
据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序。
JDBC体系结构
Java提供访问数据库规范称为JDBC,而生产厂商提供规范的实现类称为驱动。没有驱动将无法完成数据库连接,
也不能操作数据库,每个数据库厂商都需要提供自己的驱动,用来连接自己公司的数据库,也就是说驱动一般都由数据库生成厂商提供。

JDBC体系结构由两层组成:
JDBC:提供了应用程序到数据库连接规范。
JDBC驱动程序: 连接数据库的驱动程序的实现。
JDBC API使用驱动程序管理器来管理不同数据库的驱动程序

JDBC核心组件
DriverManager: 此类管理数据库驱动程序列表。使用通信协议将来自java应用程序的连接请求与适当的数据库驱动程序匹配。 Driver:此接口处理与数据库服务器的通信,我们很少会直接与Driver对象进行交互。而是使用DriverManager对象来管理这种类型的对象。 Connection:该接口具有用于连接数据库的所有方法。连接对象表示通信上下文,数据库的所有通信仅通过连接对象。 Statement:使用从此接口创建的对象将SQL语句提交到数据库。除了执行存储过程之外,一些派生接口还接受参数。 ResultSet:在使用Statement对象执行SQL查询后,这些对象保存从数据库检索的数据。它作为一个迭代器,允许我们移动其数据。 SQLException:此类处理数据库应用程序中发生的任何异常。
JDBC入门
构建JDBC应用程序涉及以下六个步骤: - 导入JDBC驱动包:需要下载包含数据库编程所需的JDBC的jar包。
- 注册JDBC驱动程序:要求您初始化驱动程序,以便您可以打开与数据库的通信通道。
Class.forName("com.mysql.jdbc.Driver");
- 创建连接:需要使用DriverManager.getConnection()方法创建一个Connection对象,该对象表示与数据库的物理连接。
//连接字符串 characterEncoding=utf8采用编码格式 useSSL=false不适用SSL安全连接
String URL = "jdbc:mysql://localhost:3306/emp?characterEncoding=utf8&useSSL=false";
Connection conn = DriverManager.getConnection(URL, USER, PASS);
- 执行查询:需要使用类型为Statement的对象来构建和提交SQL语句到数据库。
Statement stat= conn.creatStatement();
- 从结果集中提取数据:需要使用相应的ResultSet.getXXX()方法从结果集中检索数据。
ResultSet rs = stat.execute(executeUpdate/executeQuery)(*****);
- 释放资源:需要明确地关闭所有数据库资源,而不依赖于JVM的垃圾收集。
rs.close();
stat.close();
conn.close();
createStatement 容易sql注入
sql注入: SQL注入即是指web应用程序对用户输入数据的合法性没有判断或过滤不严,攻击者可以在web应用程序中事先定义好的查询语句的结尾上添加额外的SQL语句,在管理员不知情的情况下实现非法操作,以此来实现欺骗数据库服务器执行非授权的任意查询,从而进一步得到相应的数据信息。
preparedStatement
PreparedStatement接口扩展了Statement接口,提供了比Statement对象更强大的功能。
作用:1预编译,效率高 2 安全,避免SQL注入
String SQL = "Update Employees SET age = ? WHERE id = ?";
pstmt = conn.prepareStatement(SQL);
. . .
JDBC中的所有参数都由 ? 符号,这被称为参数标记。在执行SQL语句之前,必须为每个参数提供值。
最后所有的都要关闭!!!!也就是释放资源
026_JDBC的更多相关文章
随机推荐
- EF批量添加
1.首先,打开工具——NuGet包管理器——管理解决方案的NoGet程序包——搜索Z.EntityFramework.Extensions 点击安装!!! codefirst定义一个实体,用EF的方法 ...
- List之取不同元素
1.工具-->NuGet包管理器-->管理解决方案的NuGet包程序包 2.添加System.Linq包 3.引用 using System.linq List<int> li ...
- 【BZOJ2938】【luoguP2444】病毒
description 二进制病毒审查委员会最近发现了如下的规律:某些确定的二进制串是病毒的代码.如果某段代码中不存在任何一段病毒代码,那么我们就称这段代码是安全的.现在委员会已经找出了所有的病毒代码 ...
- csp-s模拟测试91
csp-s模拟测试91 倒悬吃屎的一套题. $T1$认真(?)分析题意发现复杂度不能带$n$(?),计划直接维护答案,考虑操作对答案的影响,未果.突然发现可以动态开点权值线段树打部分分,后来$Tm$一 ...
- 在WinDBG中查看函数的反汇编代码的命令
命令 ========== u . u $ip 上面的两个命令是效果是一样的, 反汇编当前$ip地址上的8条命令. uf . uf $ip 上面两个命令的效果是一样的, 反汇编当前$ip地址上的整个函 ...
- 对A盾原理的小小总结,膜拜A神
A盾的原理是在驱动加载时重载os内核,获取原始ssdt表的地址. 应用层点击查询的代码在文件A-ProtectView.cpp中,每种点击操作调用相应的 query查询函数,在query函数里 Rea ...
- 基于Netty的RPC架构学习笔记(九):自定义序列化协议
文章目录 为什么需要自定义序列化协议
- Android笔记之从图库选择图片
Demo链接:https://pan.baidu.com/s/1T4T2pTEswmbcYYfpN3OwDw,提取码:pzqy 参考链接:[Android Example] Pick Image fr ...
- Linux ls 命令实现(简化版)
在学习linux系统编程的时候,实现了ls命令的简化版本号. 实现的功能例如以下: 1. 每种文件类型有自己的颜色 (- 普通文件, d 文件夹文件, l 链接文件. c 字符设备文件. b 快设备文 ...
- Neo4j中實現自定義中文全文索引
資料庫檢索效率時,一般首要優化途徑是從索引入手,然後根據需求再考慮更復雜的負載均衡.讀寫分離和分散式水平/垂直分庫/表等手段:索引通過資訊冗餘來提高檢索效率,其以空間換時間並會降低資料寫入的效率,因此 ...