JDBC笔记

黑马程序员最新版JavaWeb基础教程,Java web从入门到企业实战完整版_哔哩哔哩_bilibili

简介

使用java语言操作关系型数据库的一套API

Java DataBasr Conectivity Java数据库连接

驱动就是实现类,官方定义一套操作所有关系型数据库的规则,即接口

各个数据库厂商实现这套接口(即驱动),提供数据库驱动jar包

使用这套接口(jdbc)编程,真正执行的代码是驱动jar包中的实现类

一个简单执行步骤

API详解

  • DriverManager :驱动管理类
  •  注册驱动

  • 获取数据库连接

  • Connetion
  • 获取执行SQL的对象

  • 管理事务

事务:要么同时发生,要么都不发生

Java里处理事务异常的机制:try...catch

  • Statement
  • 执行sql语句

  • (Data Definition Language 数据定义语言)用于操作对象及对象本身,这种对象包括数据库,表对象,及视图对象
  • create:创建数据库和数据库的一些对象
  • drop:删除数据表、索引、触发程序、条件约束以及数据表的权限等
  • alter:修改数据表定义及数据属性
  • (Data Manipulation Language 数据操控语言) 用于操作数据库对象对象中包含的数据
  • insert:向数据库插入一条数据
  • delete:删除表中的一条或多条记录
  • update:用于修改表中的数据
  • (Data Query Language 数据查询语言 )用于查询数据
  • select:用于查询表中的数据
  • ResultSet
  • 封装了DQL查询语句的结果

  • 获取查询结果

使用步骤:

  1. 游标向下移动一行,并判断该行是否有数据:next()
  1. 获取数据:getXxx(参数)

  • PreparedStatement
  • 预编译SQL语句并执行;预防SQL注入问题

SQL注入:通过操作输入来修改事先定好的SQL语句,以达到执行代码对服务器进行攻击的方法

步骤

  1. 获取PreparedStatement对象

  1. 设置参数值

  1. 执行SQL

好处

  1. 预编译SQL,性能更高

预编译:前面的模板固定,参数不确定。即检查SQL语法和编译SQL只需要执行一次

  1. 防止SQL注入:将敏感字符进行转义

原理

预编译功能开启

  1. useServerPrepStmts=true
  1. 配置MySQL执行日志(重启mysql服务后生效)

工作原理

  1. 在获取PreparedStatement对象时,将sql语句发送给mysql服务器进行检查和编译
  1. 执行时就不用再进行这些步骤,速度更快
  1. 如果sql模板一样,则只需要进行一次检查

数据库连接池

简介

数据库连接池是一个容器,负责分配、管理数据库连接(Connection)如果不使用,那么conn一连接完就失效了。

它允许应用程序重复使用一个现有的数据库连接,而不是重新建立一个

释放空闲时间超过最大空闲时间的数据库连接来避免因为没有释放数据库连接而引起的数据库连接遗漏

实现

Druid数据库连接池

一、概述: JDBC从物理结构上说就是Java语言访问数据库的一套接口集合。从本质上来说就是调用者(程序员)和实现者(数据库厂商)之间的协议。JDBC的实现由数据库厂商以驱动程序的形式提供。JDBC API 使得开发人员可以使用纯Java的方式来连接数据库,并进行操作。 ODBC:基于C语言的数据库访问接口。 JDBC也就是Java版的ODBC。 JDBC的特性:高度的一致性、简单性(常用的接口只有4、5个)。 1.在JDBC中包括了两个包:java.sql和javax.sql。 ① java.sql 基本功能。这个包中的类和接口主要针对基本的数据库编程服务,如生成连接、执行语句以及准备语句和运行批处理查询等。同时也有一些高级的处理,比如批处理更新、事务隔离和可滚动结果集等。 ② javax.sql 扩展功能。它主要为数据库方面的高级操作提供了接口和类。如为连接管理、分布式事务和旧有的连接提供了更好的抽象,它引入了容器管理的连接池、分布式事务和行集等。 注:除了标出的Class,其它均为接口。 API 说明 java.sql.Connection 与特定数据库的连接(会话)。能够通过getMetaData方法获得数据库提供的信息、所支持的SQL语法、存储过程和此连接的功能等信息。代表了数据库。 java.sql.Driver 每个驱动程序类必需实现的接口,同时,每个数据库驱动程序都应该提供一个实现Driver接口的类。 java.sql.DriverManager (Class) 管理一组JDBC驱动程序的基本服务。作为初始化的一部分,此接口会尝试加载在”jdbc.drivers”系统属性中引用的驱动程序。只是一个辅助类,是工具。 java.sql.Statement 用于执行静态SQL语句并返回其生成结果的对象。 java.sql.PreparedStatement 继承Statement接口,表示预编译的SQL语句的对象,SQL语句被预编译并且存储在PreparedStatement对象中。然后可以使用此对象高效地多次执行该语句。 java.sql.CallableStatement 用来访问数据库中的存储过程。它提供了一些方法来指定语句所使用的输入/输出参数。 java.sql.ResultSet 指的是查询返回的数据库结果集。 java.sql.ResultSetMetaData 可用于获取关于ResultSet对象中列的类型和属性信息的对象。
Day1–JDBC概述+JDBC完成CRUD+DAO设计 1.JDBC概述 1.1 什么是持久化(persistence): 持久化(persistence):把数据保存到可掉电式存储设备中以供之后使用。 ​ 保存数据: ​ 内存中: 掉电之后,数据就没了. ​ 磁盘中: 掉电之后,数据依然存在. 大多数情况下,特别是企业级应用,数据持久化意味着将内存中的数据保存到硬盘上加以”固化”,而持久化的实现过程大多通过各种关系数据库来完成。 持久化的主要应用是将内存中的数据存储在 关系型数据库中,当然也可以存储在磁盘文件、XML数据文件中。 JPA:JavaEE的规范,Java persistence api: Java的持久化API. Hibernate实现了该规范.(xml/注解) -------------------------------------------------------------------------------------------------------------------- 在Java中,数据库存取技术 只能通过JDBC 访问数据库: JDBC访问数据库的形式主要有两种: ​ 1).直接使用JDBC的API去访问数据库服务器(MySQL/Oracle). ​ 2).间接地使用JDBC的API去访问数据库服务器. ​ 第三方O/R Mapping工具,如Hibernate, MyBatis等.(底层依然是JDBC) ​ JDBCjava访问数据库的基石,其他技术都是对jdbc的封装. 1.2 JDBC(Java DataBase Connectivity): 是一种用于执行SQL语句的Java API(接口,类,方法),可以为多种关系数据库提供统一访问, 它由一组用Java语言编写的类和接口组成。 JDBC提供了一种基准,据此可以构建更高级的工具和接口,使数据库开发人员能够编写数据库应用程序. ​ JDBC为访问不同的数据库提供了一种统一的途径,为开发者屏蔽了一些细节问题。 JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统, 这样就使得程序员无需对特定的数据库系统的特点有过多的了解,从而大大简化和加快了开发过程。 ​ 总结: JDBC本身是java连接数据库的一个标准,是进行数据库连接的抽象层,由java编写的一组类和接口组成,接口的实现由各个数据库厂商来完成. --------------------- 作者:故事我忘了i 来源:优快云
黑马提供的关于JDBC笔记包含快速入门、API介绍以及SQL注入相关内容: ### JDBC快速入门 ```java package com.feng.jdbc; import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class JdbcDemo { public static void main(String[] args) throws Exception { //1.注册驱动(jdk1.8之后此步骤可以跳过) Class.forName("com.mysql.jdbc.Driver"); //2.获取数据库连接 String url = "jdbc:mysql://127.0.0.1:3306/learn_jdbc"; String user = "root"; String password = "******"; Connection conn = DriverManager.getConnection(url, user, password); //3.定义Sql语句 String sql = "UPDATE user set age=27 WHERE id=1;"; //4.获取执行SQL的对象statement Statement stmt = conn.createStatement(); //5.执行sql int count = stmt.executeUpdate(sql); //6.处理结果 System.out.println(count); //7.释放资源 stmt.close(); conn.close(); } } ``` ### JDBC - API #### DriverManager - 注册驱动:在代码中使用 `Class.forName("com.mysql.jdbc.Driver");` 进行驱动注册(jdk1.8之后此步骤可以跳过) [^1]。 ### SQL注入 ```java @Test //SQL注入 public void testLogin() throws Exception { //2. 获取连接:如果连接的是本机mysql并且端口是默认的3306 可以简化书写 String url = "jdbc:mysql:///db1?useSSL=false"; String username = "root"; String password = "1234"; Connection conn = DriverManager.getConnection(url, username, password); // 接收用户输入 用户名和密码 String name = "sjdljfld"; String pwd = "' or '1' = '1"; String sql = "select * from tb_user where username = '"+name+"' and password = '"+pwd+"'"; // 获取stmt对象 Statement stmt = conn.createStatement(); // 执行sql ResultSet rs = stmt.executeQuery(sql); // 判断登录是否成功 if(rs.next()){ System.out.println("登录成功~"); }else{ System.out.println("登录失败~"); } //7. 释放资源 rs.close(); stmt.close(); conn.close(); } ``` SQL注入是通过操作输入来修改事先定义好的SQL语句,用以达到执行代码对服务器进行攻击 [^3]。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值