JDBC入门

一.简单了解JDBC

JDBC:(Java DataBase Connectivity),就是使用Java语言操作关系型数据库的一套API。

本质:

  • sun公司官方定义的一套操作所有关系型数据库的规范,即接口。

  • 各个数据库厂商去实现这套接口,提供数据库驱动jar包。

  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类。

二.用JDBC写一个入门程序

1.前提:

(1)在数据库中创建相应数据,以及完成maven等环境的配置。

(2)注入依赖

<dependencies>

<dependency>

<groupId>com.mysql</groupId>

<artifactId>mysql-connector-j</artifactId>

<version>8.0.33</version>

</dependency>

<dependency>

<groupId>org.junit.jupiter</groupId>

<artifactId>junit-jupiter</artifactId>

<version>5.9.3</version>

<scope>test</scope>

</dependency>

<dependency>

<groupId>org.projectlombok</groupId>

<artifactId>lombok</artifactId>

<version>1.18.30</version>

</dependency>

</dependencies>

2.代码演示

步骤:

1.注册驱动

2.连接数据库

3.获取SQL语句执行对象

4.执行SQL语句

5.释放资源

翻译理解:connection(连接),statemnet(语句),execute(执行·),update(更新)

注意点:executeUpdate执行的是DML语句(增,删,改)

三.通过JDBC来实现对数据库的查询功能

1.代码实现:

2.翻译理解

prepare(准备),query(查询)

3.代码解析

1.PreparedStatement

预编译SQL(参数动态传递)(用?占位避免数据写死)

这种呢,并未将参数值在SQL语句中写死,而是使用 ? 进行占位,然后再指定每一个占位符对应的值是多少,而最终在执行SQL语句的时候,程序会将SQL语句(SELECT * FROM user WHERE username = ? AND password = ?),以及参数值("daqiao", "123456")都发送给数据库,然后在执行的时候,会使用参数值,将?占位符替换掉。

作用:

  • 防止SQL注入(一种黑客攻击手段)

  • 性能更高

2.ResultSet

ResultSet(结果集对象):封装了DQL查询语句查询的结果。  

  •  next():将光标从当前位置向前移动一行,并判断当前行是否为有效行,返回值为boolean。

  • true:有效行,当前行有数据
  • false:无效行,当前行没有数据
  • getXxx(…):获取数据,可以根据列的编号获取,也可以根据列名获取(推荐)。

四.详细了解预编译SQL的作用

作用1:防止SQL注入

如果采用静态参数

假设正确的用户和密码是songjiang 123456

数据库中的查询代码为

当按图所示进行登录时却能够成功

关键就在于登录后提交到数据库的查询代码会变为

从而登录成功。

如果使用动态参数

在预编译SQL语句中,当我们执行的时候,会把整个' or '1'='1作为一个完整的参数,赋值给第2个问号' or '1'='1进行了转义,只当做字符串使用)

那么此时再查询时,就查询不到对应的数据了,登录失败。

作用2:性能高

编译SQL后会将SQL语句缓存起来,在执行下一条语句之前会先查看缓存里有没有,如果有可以直接执行,不用再进行前面的三步操作,从而提高效率。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值