JDBC-课堂笔记
一、DCL(了解)
-- 1. 创建一个帐号:lisi
CREATE USER 'lisi'@'%' IDENTIFIED BY 'lisi';
-- 2. 给用户授权:所有权限、heima63所有表
GRANT ALL ON heima63.* TO 'lisi'@'%';
-- 3. 给用户撤消授权:插入、修改、删除的权限
REVOKE INSERT, UPDATE, DELETE ON heima63.* FROM 'lisi'@'%';
-- 4. 查看授权
SHOW GRANTS FOR 'lisi'@'%';
-- 5. 删除用户
DROP USER 'lisi'@'%';
-- 6. 修改密码
-- 6.1 修改其它用户的密码
SET PASSWORD FOR 'lisi'@'%' = PASSWORD('1234');
-- 6.2 修改root自己的密码
SET PASSWORD = PASSWORD('1234');
二、JDBC
- JDBC简介
- 什么是JDBC:Sun公司提供的一套规范(接口),由一堆接口和工具类组成的,可以让Java用来调用操作数据库
- JDBC的作用:实现了Java程序对不同数据库的统一操作
- 数据库驱动:由数据库厂商提供的,是JDBC规范的实现类,打包形成的jar包,叫数据库驱动包
- 要操作什么数据库,就必须有什么数据库的驱动包
-
JDBC快速入门
//1.注册驱动
//2.获取连接
//3.创建SQL执行平台
//4.执行SQL语句
//5.处理结果
//6.释放资源
3. JDBC的API详解
3.1 注册驱动
-
JDBC的驱动接口:java.sql.Driver
-
MySql的驱动类:com.mysql.jdbc.Driver
-
如何注册驱动:
//方式一:不推荐
DriverManager.registerDriver(new com.mysql.jdbc.Driver());//方式二:推荐 Class.forName("com.mysql.jdbc.Driver");
-
方式一不推荐的原因:
- 注册了2次
- 有硬编码问题:源码里写死了注册的是MySql的驱动;如果将来换成了Oracle,就必须要修改源码
3.2 获取连接
-
连接对象:java.sql.Connection
-
如何获取:
Connection connection = DriverManager.getConnection(url,username,password);
-
参数:
- url:数据库的连接地址,由三部分组成,使用英文冒号连接
- 协议名:固定值jdbc
- 子协议:通常是数据库的类型,比如:mysql
- 具体地址:由数据库自行决定的格式,MySql的写法://ip:port/database
- 如果连接的是本机、默认端口的MySql,可以简写成:///database
- username:数据库的登录名
- password:数据库的密码
- url:数据库的连接地址,由三部分组成,使用英文冒号连接
3.3 创建SQL执行平台
-
SQL执行平台:java.sql.Statement
-
获取方式:
Statement statement = connection.createStatement();
3.4 执行SQL语句
- 执行DQL语句:statement.executeQuery(sql),返回值:ResultSet,是查询的结果集对象
- 执行DML语句:statement.executeUpdate(sql),返回值:int,表示影响的行数
- 执行任意语句:statement.execute(sql),返回值:boolean;
-
如果执行的是查询/有ResultSet对象,返回true
-
如果执行的不是查询/没有ResultSet对象,返回false
//执行查询 ResultSet resultSet = statement.executeQuery("select * from emp"); //执行增、删、改 int count = statement.executeUpdate("INSERT INTO account (id,NAME,money) VALUES (NULL,'jack', 100)"); int count = statement.executeUpdate("update account set money = 0 where name = 'jack'"); int count = statement.executeUpdate("delete from account where name = 'jack'"); //任意SQL,这里是DDL String sql = "CREATE TABLE USER(\n" + "\tid INT PRIMARY KEY AUTO_INCREMENT,\n" + "\tusername VARCHAR(20),\n" + "\tPASSWORD VARCHAR(50)\n" + ")"; boolean isQuery = statement.execute(sql);
-
3.5 处理结果集
- 查询的结果集对象:java.sql.ResultSet
- 要想循环遍历,需要:
- 向下移动行指针:next()
- true:移动成功
- false:移动失败
- 获取指针所在行的某一列数据:
- getXXX(int 列序号):XXX是数据类型,列序号:从1开始的
- getXXX(String 列名称):XXX是数据类型
- 向下移动行指针:next()
注意:一定要先向下移动一次行指针,才可以获取到数据;否则会报错
while (resultSet.next()) {
//字段是什么类型,就获取成为什么类型的,推荐
int id = resultSet.getInt("id");
String ename = resultSet.getString("ename");
Date joindate = resultSet.getDate("joindate");
double salary = resultSet.getDouble("salary");
//获取的类型,可以和字段类型不同,但是不建议
String id = resultSet.getString("id");
Object ename = resultSet.getObject("ename");
String joindate = resultSet.getString("joindate");
String salary = resultSet.getString("salary");
//通过列序号获取数据,基本不用
/*int id = resultSet.getInt(1);
String ename = resultSet.getString(2);
Date joindate = resultSet.getDate(5);
double salary = resultSet.getDouble(6);*/
System.out.println("id:"+id+", ename:"+ename +", joindate:"+joindate+", salary:"+salary);
}
3.6 释放资源
/*
6.释放资源。顺序:ResultSet=>Statement=>Connection
*/
resultSet.close();
statement.close();
connection.close();
- JDBC工具类封装
5. JDBC的事务管理
5.1 事务管理相关的API
事务管理的方法,都是由Connection对象提供的:
- 开启事务:connection.setAutoCommit(false)
- 提交事务:connection.commit()
- 回滚事务:connection.rollback()
5.2 事务管理的步骤
try{
//1.注册驱动
//2.获取连接
//===开启事务=== 只要在执行SQL之前开启即可
//3.创建SQL执行平台
//4.执行SQL语句
//5.处理结果
//===关闭事务:提交事务=== 只要在释放资源之前,关闭事务即可
}catch(Exception e){
//===关闭事务:回滚事务===
}finally{
//6.释放资源
}
内容回顾
- DCL(了解)
- JDBC快速入门:导入jar包之后,步骤如下:
- 注册驱动
- 获取连接
- 创建SQL执行平台
- 执行SQL语句
- 处理结果
- 释放资源
- 执行SQL语句的不同API:
- 执行DML语句:statement.executeUpdate(sql),返回int,表示影响行数
- 执行DQL语句:statement.executeQuery(sql),返回ResultSet,表示查询的结果集对象
- 执行任意语句:statement.execute(sql),返回boolean,表示是否执行了查询操作/是否有ResultSet
- 处理结果集ResultSet:
- 先向下移动行指针:next()
- 如果返回true:移动成功
- 如果返回false:移动失败
- 获取指针所在行的数据:
- getXXX(int 列序号)
- getXXX(String 列名称)
- 先向下移动行指针:next()
- JDBC的事务管理
- 相关的API
- 开启事务:connection.setAutoCommit(false)
- 提交事务:connection.commit()
- 回滚事务:connection.rollback()
- 事务管理的步骤
- 相关的API
加强练习:
通过JDBC+scanner,完成添加员工信息的功能