前言
SQL(Structured Query Language)是一种用于管理关系型数据库的标准化语言,它用于定义、操作和管理数据库中的数据。SQL是一种通用的语言,可以用于多种关系型数据库管理系统(RDBMS),如MySQL、Oracle、SQL Server等。
MySQL是一种开源的关系型数据库管理系统,它使用SQL作为其查询语言。MySQL是最流行的开源数据库之一,它具有高性能、可靠性和可扩展性。MySQL支持多用户、多线程和多表操作,可以在各种操作系统上运行。
MySQL最为最流行的开源数据库,其重要性不言而喻,也是大多数程序员接触的第一款数据库,深入认识和理解MySQL也比较重要。
本篇博客介绍JDBC,Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接,阐述了JDBC的编程思想,介绍了各个API接口的分工,并且对于JDBC相关的类进行详细的分析。
其他相关的JDBC博客文章如下:
Java连接SQL数据库 & 单例封装数据库
本系列文章合集如下:
【合集】MySQL的入门进阶强化——从 普通人 到 超级赛亚人 的 华丽转身
目录
- 引出
- JDBC它是什么
- JDBC编程思想
- JDBC流程
- 编写流程
- JDBC规范架构
- API分工
- JDBC类的分析
- DriverMananger类
- 1. 作用
- 2. 静态方法
- 3. 连接字符串:
- 4. 连接数据库代码
- Connection接口
- 1. 介绍
- 2. 方法
- PreparedStatement接口
- 1. Statement和PreparedStatement
- 2. PreparedStatement接口中方法
- ResultSet接口
- 1. 作用
- 2. 如何获取数据
- 3. 方法
- 4. MySQL中数据类型与Java数据类型对应关系
- 5. 查询代码
- 总结
引出
1.介绍JDBC,Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接;
2.阐述了JDBC的编程思想,介绍了各个API接口的分工;
3.对于JDBC相关的类进行详细的分析;
JDBC它是什么
1、JDBC全称Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接
2、JDBC是一组API,通过这些API可以很轻松的操作各种数据库。
JDBC:Java DataBase Connectivity (Java 数据库连接),使用Java语言来操作关系型数据库的一组API(应用程序接口),JDBC本质上是一组接口,实现类由数据库厂商提供。
JDBC编程思想
高度封装,操作数据库只需要和API (接口和类,几个对象)打交道,具体实现交给JDBC来完成即可。
- 跨数据库
如果没有JDBC,我们在会根据每种数据库,都要单独编写一组代码。
我们只需要针对JDBC接口进行编程即可,好处:
- 降低我们的代码与具体数据库之间耦合度。
- 同一套代码可以访问不同的数据库
- 也是多态的好处体现
实现类称为数据库驱动包,需要额外从网上下载。
JDBC流程
左边是客户端Java代码,右边是服务器端MySQL
编写流程
- 注册驱动程序 (从JDK5可以省略,
Class.forName("com.mysql.jdbc.Driver")
) - 获取连接对象
- 通过连接对象获取语句对象
- 发送SQL语句给数据库服务器,由服务器去执行SQL语句。
- 获取数据库返回的结果集,处理结果集。
- 关闭连接,释放资源
JDBC规范架构
驱动就是由不同厂商提供的jar包。
API分工
JDBC类的分析
DriverMananger类
1. 作用
- 加载并且注册数据库驱动
- 获取连接对象
2. 静态方法
public static Connection getConnection(String 连接字符串, String 用户名, String 密码) throws SQLException
3. 连接字符串:
不同的数据库,连接字符串的格式不同。MySQL的连接字符串:
MySQL的连接URL编写方式
jdbc:mysql://主机名称:mysql服务端口号/数据库名称?参数=值&参数=值
jdbc:mysql://localhost:3306/persondb?useUnicode=true&characterEncoding=utf-8&useSSL=false&serverTimezone=GMT%2B8
4. 连接数据库代码
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class AppDemo1 {
public static void main(String[] args) throws SQLException {
//获取连接对象,Connection是一个接口,返回的是它的实现类,这是一种多态。实现类由MySQL驱动提供。
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/woniu", "root", "root");
//输出连接对象
System.out.println("连接对象:" + connection);
//关闭连接对象
connection.close();
}
}
Connection接口
1. 介绍
Connection代表连接对象,是一个接口,由数据库厂商提供实现类。
2. 方法
创建一个 PreparedStatement对象,用于将参数化的SQL语句发送到数据库。
PreparedStatement prepareStatement(String sql) 参数是SQL语句,占带有占位符,占位符使用问号?表示。
PreparedStatement接口的实现类由数据库驱动提供
注:所有的参数使用占位符,为什么使用占位符:
- 可以避免SQL注入的风险
- 占位符是可变的,查询语句更加灵活。
PreparedStatement接口
1. Statement和PreparedStatement
获取访问数据库的语句对象:
- Statement:父接口,有SQL注入的安全问题,在后期很少使用。
- PreparedStatement:子接口,预编译的语句对象,执行效率更高,没有安全问题,使用这个。
interface PreparedStatement extends Statement
2. PreparedStatement接口中方法
PreparedStatement接口中的方法 | 描述 |
---|---|
int executeUpdate() | 执行增删改的操作,返回值:影响的行数 |
ResultSet executeQuery() | 执行查询的操作,返回值:返回结果集 |
void set数据类型(int 占位符位置,类型类型 真实的值) | 替换SQL语句中占位符为真实的值: 参数1:在SQL语句中占位符出现的位置,从1开始 参数2:替换这个占位符的值 |
ResultSet接口
1. 作用
封装服务器端返回的数据,我们只需要从ResultSet中取出数据即可。
2. 如何获取数据
3. 方法
方法名 | 作用 |
---|---|
boolean next() | 将光标从当前位置向下移动一行。如果下一行有数据,返回true,如果到最后返回false |
数据类型 get数据类型(int 列号) | 通过列号获取数据 |
数据类型 get数据类型(String 列名) | 通过列名获取数据 |
4. MySQL中数据类型与Java数据类型对应关系
Java数据类型 | 数据库数据类型 |
---|---|
int、long | INT、BIGINT |
String | CHAR、VARCHAR |
java.sql.Date、java.sql.Time、java.sql.Timestamp | DATE、TIME、DATETIME |
float、double | FLOAT、DOUBLE、DECIMAL |
5. 查询代码
import java.sql.*;
public class AppDemo1 {
public static void main(String[] args) throws SQLException {
//获取连接对象,Connection是一个接口,返回的是它的实现类,这是一种多态。实现类由MySQL驱动提供。
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/woniu", "root", "root");
//输出连接对象
System.out.println("连接对象:" + connection);
//创建语句对象:查询所有教学部的老师
PreparedStatement prepareStatement = connection.prepareStatement("select * from teacher where depart=?");
//替换占位符
prepareStatement.setString(1, "教学部");
//执行查询操作,返回结果集
ResultSet resultSet = prepareStatement.executeQuery();
//遍历结果集
while (resultSet.next()) {
//建议基本类型都使用包装类
Integer id = resultSet.getInt("id");
String name = resultSet.getString("name");
Date birthday = resultSet.getDate("birthday");
String depart = resultSet.getString("depart");
Double salary = resultSet.getDouble("salary");
System.out.println("编号:" + id + "\t姓名:" + name + "\t生日:" +
birthday + "\t部门:" + depart + "\t工资:" + salary);
}
//关闭连接对象:先开的后关
resultSet.close();
prepareStatement.close();
connection.close();
}
}
总结
1.介绍JDBC,Java Database Connectivity,简称jdbc,翻译过来就是 Java 数据库连接;
2.阐述了JDBC的编程思想,介绍了各个API接口的分工;
3.对于JDBC相关的类进行详细的分析;