JDBC-01-授课笔记
一、JDBC快速入门
1.jdbc的概念
JDBC(Java DataBase Connectivity,java数据库连接),说白了,就是通过咱们的java程序连接数据库的,是一种用于执行SQL语句的Java API,可以为多种关系型数据库提供统一访问,它是由一组用Java语言编写的类和接口组成的。
2.jdbc的本质
-
其实就是java官方提供的一套规范(接口)。用于帮助开发人员快速实现不同关系型数据库的连接!
3.jdbc的快速入门程序
导入jar包:java官方只是提供了一套规范,至于具体的实现还是由各个数据库厂商自己来实现的
注册驱动
Class.forName("com.mysql.jdbc.Driver");
获取连接
Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/db2", "root", "root");
获取执行者对象
Statement stat = con.createStatement();
执行sql语句,并接收返回结果
String sql = "SELECT * FROM user";
ResultSet rs = stat.executeQuery(sql);
处理结果
while(rs.next()) {
System.out.println(rs.getInt("id") + "\t" + rs.getString("name"));
}
释放资源
con.close();
stat.close();
rs.close();
二、JDBC各个功能类详解
1.DriverManager
-
DriverManager:驱动管理对象功能类
-
注册驱动(告诉程序该使用哪一个数据库驱动)
-
static void registerDriver(Driver driver):注册与给定的驱动程序 DriverManager (该方法是DriverManager类中的静态方法)
-
写代码使用:Class.forName("com.mysql.jdbc.Driver");
-
通过查看源码发现:在com.mysql.jdbc.Driver类中存在静态代码块
static { try { java.sql.DriverManager.registerDriver(new Driver()); } catch (SQLException E) { throw new RuntimeException("Can't register driver!"); } }
-
注意:mysql5之后的驱动jar包可以省略注册驱动的步骤。在jar包中,存在一个java.sql.Driver配置文件,文件中指定了com.mysql.jdbc.Driver
-
-
获取数据库连接(获取到数据库的连接并返回连接对象)
-
static Connection getConnection(String url, String user, String password); (该方法是DriverManager类中的静态方法)
-
返回值:Connection数据库连接对象
-
参数
-
url:指定连接的路径。语法:jdbc:mysql://ip地址(域名):端口号/数据库名称
-
user:用户名
-
password:密码
-
-
-
-
Connection
-
Connection:数据库连接对象
-
获取执行者对象
-
获取普通执行者对象:Statement createStatement();
-
获取预编译执行者对象:PreparedStatement prepareStatement(String sql);
-
-
管理事务
-
开启事务:setAutoCommit(boolean autoCommit); 参数为false,则开启事务。
-
提交事务:commit();
-
回滚事务:rollback();
-
-
释放资源
-
立即将数据库连接对象释放:void close();
-
-
3.Statement
-
Statement:执行sql语句的对象
-
执行DML语句:int executeUpdate(String sql);
-
返回值int:返回影响的行数。
-
参数sql:可以执行insert、update、delete语句。
该返回值是int类型,不用释放资源
-
-
执行DQL语句:ResultSet executeQuery(String sql);
-
返回值ResultSet:封装查询的结果。
-
参数sql:可以执行select语句。
-
-
释放资源
-
立即将执行者对象释放:void close();
-
-
4.ResultSet
-
ResultSet:结果集对象
-
判断结果集中是否还有数据:boolean next();
-
有数据返回true,并将索引向下移动一行
-
没有数据返回false
-
所以我们可以利用while循环来遍历数据
-
-
获取结果集中的数据:XXX getXxx("列名");
-
XXX代表数据类型(要获取某列数据,这一列的数据类型)
-
例如:String getString("name"); int getInt("age");
-
-
释放资源
-
立即将结果集对象释放:void close();
-
-
三、JDBC案例student学生表的CRUD
1.数据准备
-
数据库和数据表
-- 创建db14数据库
CREATE DATABASE db14;
-- 使用db14数据库
USE db14;
-- 创建student表
CREATE TABLE student(
sid INT PRIMARY KEY AUTO_INCREMENT, -- 学生id
NAME VARCHAR(20), -- 学生姓名
age INT, -- 学生年龄
birthday DATE -- 学生生日
);
-- 添加数据
INSERT INTO student VALUES (NULL,'张三',23,'1999-09-23'),(NULL,'李四',24,'1998-08-10'),(NULL,'王五',25,'1996-06-06'),(NULL,'赵六',26,'1994-10-20');
实体类
-
Student类,成员变量对应表中的列
-
注意:所有的基本数据类型需要使用包装类,因为我们现在是在操作数据库,把数据库里的数据读取出来之后,封装到学生对象里面,那么我们数据表里的数据有可能出现null值的情况,以防null值无法封装
注意:我们为什么要创建实体类呢?因为我们的学生表里的数据比较多了&#