JDBC-访问关系型数据库的API标准

JDBC-访问【关系型数据库】的API标准(侧重原理)

项目的三层结构

前台后台底层
浏览器服务器数据库服务器
JavaSQL

Java学习阶段

Java语言:基础语法、面向对象、API。

Java技术:JDBC技术、Servlet技术、JSP技术等。(侧重原理)

Java框架:SpringBoot框架、Spring框架、SpringMVC框架、Mybatis框架。

JDBC技术:Java、数据库连接标准

理解:【Java语言】访问【关系型数据库】的API标准。JDBC是用Java语言向数据库发送SQL语句。

理解:JDBC是接口,而JDBC驱动才是接口的实现,没有驱动无法完成数据库连接!每个数据库厂商都有自己的驱动,用来连接自己公司的数据库。

了解:JDBC是JavaEE平台核心技术之一。

JDBC核心类(接口)介绍

JDBC中的核心类有:DriverManager、Connection、Statement,和ResultSet!

DriverManger(驱动管理器)的作用有两个:

l 注册驱动:这可以让JDBC知道要使用的是哪个驱动;

l 获取Connection:如果可以获取到Connection,那么说明已经与数据库连接上了。

Connection对象表示连接,与数据库的通讯都是通过这个对象展开的:

l Connection最为重要的一个方法就是用来获取Statement对象

l Statement是用来向数据库发送SQL语句的,这样数据库就会执行发送过来的SQL语句

l void executeUpdate(String sql):执行更新操作(insert、update、delete等);

l ResultSet executeQuery(String sql):执行查询操作,数据库在执行查询后会把查询结果,查询结果就是ResultSet;

ResultSet对象表示查询结果集,只有在执行查询操作后才会有结果集的产生。结果集是一个二维的表格,有行有列。操作结果集要学习移动ResultSet内部的“行光标”,以及获取当前行上的每一列上的数据:

l boolean next():使“行光标”移动到下一行,并返回移动后的行是否存在;

l XXX getXXX(int col):获取当前行指定列上的值,参数就是列数,列数从1开始,而不是0。

PreparedStatement是什么?

PreparedStatement叫预编译声明

PreparedStatement是Statement的子接口,你可以使用PreparedStatement来替换Statement。

PreparedStatement的好处:

l 防止SQL攻击;

l 提高代码的可读性,以可维护性;

l 提高效率。

PreparedStatement的使用

l 使用Connection的prepareStatement(String sql):即创建它时就让它与一条SQL模板绑定;

l 调用PreparedStatement的setXXX()系列方法为问号设置值

l 调用executeUpdate()或executeQuery()方法,但要注意,调用没有参数的方法;

Mysql准备工作

数据库:db0419
表:person
字段:id、name、sal、bir

JDBC准备工作

新建lib文件夹
把mysql的启动jar包拷贝到lib中
把jar包添加到类路径中

Intellij IDEA将 .jar 文件置于类路径(classpath):

File => Project Structure =>Modules => Dependencies => 点击加号 =》 选择:JARs or directories =》选择想要导入的 .jar文件,点击下方 “OK”。

JDBC标准访问数据库要求

掌握一:JDBC实现添加、修改、删除的步骤。

import java.sql.DriverManager;//驱动管理类
import java.sql.SQLException;
import java.sql.Connection;//和数据库连接的接口
import java.sql.PreparedStatement;

public static void main(String[] args) {
		// TODO (2)JDBC实现添加、修改、删除的7个步骤
try {
	// 第一步:加载驱动(驱动类的路径)
	Class.forName("com.mysql.jdbc.Driver");
	// 第二步:获取连接(数据库访问地址、用户名、密码)
	Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db0419", "root", "123456");
	// 第三步:设置事务为手动提交
	conn.setAutoCommit(false);
	// 第四步:编写SQL语句的句式、获取语句对象(?占位符)
	String sql = "insert into person(name, sal, bir) values(?,?,?)";
	String sql = "update person set name=?, sal=? where id=?";
	String sql = "delete from person where id = ?";
	PreparedStatement ps = conn.prepareStatement(sql);//(ps就表示添加等语句的实例了)
	// 第五步:传入SQL语句参数、执行SQL语句
	ps.setString(1, "李四");1表示第一个问号,占位的是名字,String类型)
	ps.setDouble(2, 4444);
	ps.setString(3, "2000-01-21");//注意,在这里,日期用字符串类型表示
	// 返回的int整数表示添加(修改、删除)的个数
	int c = ps.executeUpdate();
	System.out.println(c);
	// 第六步:提交事务
	conn.commit();
	// 第七步:关闭连接
	conn.close();
} catch (ClassNotFoundException e) {
	e.printStackTrace();
} catch (SQLException e) {
	e.printStackTrace();
}
	}

掌握二:JDBC实现查询的步骤

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.sql.ResultSet;//结果集

public static void main(String[] args) {
			// TODO (3)JDBC实现查询5个步骤
try {
	// 第一步:加载驱动(驱动类的路径)
	Class.forName("com.mysql.jdbc.Driver");
	// 第二步:获取连接(数据库访问地址、用户名、密码)
	Connection conn = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db0419", "root", "123456");
	// 第三步:编写SQL语句、获取语句对象
	String sql = "select * from person where sal between ? and ? order by id desc";
	PreparedStatement ps = conn.prepareStatement(sql);
	// 第四步:设置SQL参数、执行SQL语句
	ps.setDouble(1, 3000);
	ps.setDouble(2, 5000);
	ResultSet rs = ps.executeQuery();
	// rs.next()判断是否有下一条记录
	while (rs.next()) {//判断是否有下一条记录
		// 当前记录的各个字段获取出来
		System.out.println(rs.getInt("id") + rs.getString("name") + rs.getDouble("sal") + rs.getString("bir"));
	}
	// 第五步:关闭连接
	conn.close();
} catch (ClassNotFoundException e) {
	e.printStackTrace();
} catch (SQLException e) {
	e.printStackTrace();
}

映射关系原理:

JavaMysql
成员变量字段
对象记录

JDBC执行 SQL语句分为2个步骤:

第一:sql句式(预编译)

第二:sql参数(后传参)

原因:防 SQL注入攻击!

举例说明:

用户:abc
密码:’ or ‘1’='1

select * from t
where name=‘abc’ and pass=‘’ or ‘1’=‘1’

拓展连接:
jdbcTemplate使用详解

NamedParameterJdbcTemplate使用详解

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

YD_1989

你的鼓励将是我最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值