概述
ctrl+alt+v:直接获取某个方法的返回值,并创建值接收
ctrl+alt+m:将java语句抽取成方法,只需要写入方法名
ctrl+alt+t:快速将选中语句加上try…catch
alt+鼠标下移:批量编辑
一 DCL(数据控制语言)
进入企业,一般有专门的DBA去负责管理数据库
1.1 创建用户
-- 格式
create user '用户名'@'主机地址' identified by '新密码';
-- 主机地址 localhost or 127.0.0.1
-- % 代表任意主机地址【慎用】
-- 密码可以为空 【慎用】
1.2 用户授权
-- 格式
grant 权限1,权限2... on 数据库名.表名 to '用户名'@'主机地址';
权限:
create alter drop select update ....
all -- 代表所有的权限【慎用】
*.* -- 所有库.所有表 【慎用】
数据库名.* --该数据库中的所有表【经常使用】
1.3 查看授权
-- 格式
show grants for '用户名'@'主机地址';
1.4 撤销授权
-- 格式
revoke 权限1,权限2... on 数据库名.表名 from '用户名'@'主机地址';
权限:
create alter drop select update ....
all -- 代表所有的权限【慎用】
*.* -- 所有库.所有表 【慎用】
数据库名.* --该数据库中的所有表【经常使用】
1.5 删除用户
-- 格式
drop user '用户名'@'主机地址';
1.6 密码管理
a)超级管理员
-- 格式 在dos窗口下
mysqladmin -u用户名 -p password 新密码
b)普通用户
-- 格式
set password for '用户名'@'主机地址'=password('新密码');
-- 创建用户
CREATE USER 'tom'@'localhost' IDENTIFIED BY '123';-- 只有本机可以使用
CREATE USER 'jerry'@'%' IDENTIFIED BY '123';-- 任意主机都可以使用
-- 用户授权
GRANT SELECT ON db_day03.* TO 'tom'@'localhost';-- 授予用户查询权限
-- 查看权限
SHOW GRANTS FOR 'tom'@'localhost';
-- 撤销授权
REVOKE SELECT ON db_day03.* FROM 'tom'@'localhost';
-- 删除用户
DROP USER 'tom'@'localhost';
-- 修改普通用户密码
SET PASSWORD FOR 'jerry'@'%'=PASSWORD('789');
二 JDBC
2.1 概述
Java DataBase Connectivity: Java数据库连接
简单来说通过java代码操作数据库
JDBC:是关系型数据库的一套规范(接口),对我们只需要学习接口的方法即可
驱动:实现类由数据库厂商提供(jar)
JDBC规范:
- DriverManager:用于注册驱动
- Connection:表示与数据库创建的连接
- Statement:操作数据库sql语句的对象
- ResultSet:结果集或一张虚拟表
2.2 初体验
需求
在java控制台输出数据库查询的结果
步骤分析
1、创建数据库表和表记录
2、创建java工程
3、导入jar包
MySQL驱动
4、编写代码
// 连接数据库
// 编写sql
// 创建语句执行者(小货车)
// 执行sql并返回结果
// 处理结果
// 关闭资源
代码片段
@Test
public void test01() throws Exception {
// 连接数据库
// 1.1 注册驱动 mysql
DriverManager.registerDriver(new Driver());
// 1.2 获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day04", "root", "root");
// 编写sql 注意 java字符串编写sql语句 分号可以省略
String sql = "select * from user;";
// 创建语句执行者(小货车)
Statement statement = connection.createStatement();
// 执行sql并返回结果
ResultSet resultSet = statement.executeQuery(sql);
// 处理结果
while (resultSet.next()) {
// 获取记录 根据key 获取value
int id = resultSet.getInt("id");
String username = resultSet.getString("username");
String password = resultSet.getString("password");
System.out.println("一条记录结果为:" + id + " " + username + " " + password);
}
// 关闭资源
resultSet.close();
statement.close();
connection.close();
}
2.3 API详解
都是sun公司提供的规范 :java.sql.*
a)DriverManager
驱动管理器
确定java代码连接哪个数据库
// 注册驱动
// DriverManager.registerDriver(Driver mysql实现类); 【后续不用】
通过翻看 com.mysql.jdbc 源码,知道在静态代码块已经实现类注册驱动的功能
只需要把 com.mysql.jdbc 类,加载到JVM虚拟机内存并初始化
//使用反射
Class.forName("com.mysql.jdbc.Driver");
//获取连接
Connection conn =DriverManager.getConnection(String 数据库地址,String 用户名,String 密码);
数据库地址:格式非常固定
jdbc:mysql://主机地址:端口号/数据库名
例如:
jdbc:mysql://127.0.0.1:3306/db_day04
jdbc:mysql:///db_day04
jdbc:mysql:///db_day04?characterEncoding=utf-8
b)Connection
static Connection getConnection(String url, String user, String password)
:试图建立到给定数据库 URL的连接。
参数说明:
- url:需要连接数据库的位置(网址)最后为数据库名
- user:用户名
- password:密码
例如: getConnection("jdbc:mysql://localhost:3306/day04", "root", "root");
让java代码与数据库建立通道
// 创建语句执行者(小货车),后续不用 有bug
public Statement createStatement();
// 创建预编译语句执行者(高铁) 今后使用,很重要
public PreparedStatement prepareStatement(String sql);
// 事务安全
c)Statement
把java代码编写sql传递给数据库,并返回数据库的结果
// 执行sql语句 【了解】
public boolean execute(String sql);//执行dml(增删改)语句返回false,执行dql(查)语句返回true
// 执行dml语句
public int executeUpdate(String dml);//返回结果为影响行数
// 执行dql语句
public ResultSet executeQuery(String dql);//返回结果虚拟表
d)ResultSet
用于接收数据库查询的虚拟表结果集
// 指针下移
public boolean next(); 若有记录返回true,若没有记录返回false
// 获取记录
public T getXxx(int 第几列 | String 列名);
// 特殊
getString 可以获得全部类型 底层进行转换(数值、日期)
e)流程图
2.4 实现增删改查
新增
// 新增
@Test
public void test01() throws Exception {
// 连接数据库
// 1.1 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 1.2 获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day04", "root", "root");
// 编写sql
String sql = "insert into user values(null,'jerry','321')";
// 创建语句执行者(小货车)
Statement statement = connection.createStatement();
// 执行sql并返回结果
int i = statement.executeUpdate(sql);
// 处理结果
if (i > 0) {
System.out.println("新增成功!");
} else {
System.out.println("新增失败!");
}
// 关闭资源
statement.close();
connection.close();
}
修改
// 修改
@Test
public void test02() throws Exception {
// 连接数据库
// 1.1 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 1.2 获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/db_day04", "root", "root");
// 编写sql
String sql = "update user set password = '456' where id = 4";
// 创建语句执行者(小货车)
Statement statement = connection.createStatement();
// 执行sql并返回结果
int i = statement.executeUpdate(sql);
// 处理结果
if (i>0) {
System.out.println("修改成功!");
}else{
System.out.println("修改失败!");
}
// 关闭资源
statement.close();
connection.close();
}
删除
// 删除
@Test
public void test03() throws Exception {
// 连接数据库
// 1.1 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 1.2 获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/db_day04", "root", "root");
// 编写sql
String sql = "delete from user where id = 4";
// 创建语句执行者(小货车)
Statement statement = connection.createStatement();
// 执行sql并返回结果
int i = statement.executeUpdate(sql);
// 处理结果
if (i>0) {
System.out.println("删除成功!");
}else{
System.out.println("删除失败!");
}
// 关闭资源
statement.close();
connection.close();
}
查询
//查询
@Test
public void test04() throws Exception{
// 连接数据库
// 1.1 注册驱动
Class.forName("com.mysql.jdbc.Driver");
// 1.2 获取连接
Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/lv","root","syr19950111");
// 编写sql
String str = "select * from user";
// 创建语句执行者(小货车)
Statement statement = connection.createStatement();
// 执行sql并返回结果
ResultSet resultSet = statement.executeQuery(str);
// 处理结果
while (resultSet.next()){
int id = resultSet.getInt("id");
String username = resultSet.getString("name");
System.out.println(id+" "+username);
}
// 关闭资源
resultSet.close();
statement.close();
connection.close();
}
2.5 工具类
我们在操作JDBC时发现,获取连接、关闭资源等代码属于公共部分,抽取到工具类,简化代码,提高效率
步骤分析
// 提供获取连接的方法
// 提供关闭资源的方法 【方法重载】
代码片段
package cn.khd.utils;
import java.sql.*;
public class JDBCUtils3 {
// 注册驱动
static {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
// 提供获取连接的方法
public static Connection getConnection() throws SQLException {
// 获取连接
return DriverManager.getConnection("jdbc:mysql://localhost:3306/lv", "root", "syr19950111");
}
// 提供关闭资源的方法(方法重载) 3个参数
public static void closeResource(ResultSet resultSet, Statement statement, Connection connection) {
// ctrl + alt + m
closeResutSet(resultSet);
closeStatement(statement);
closeConnection(connection);
}
// 提供关闭资源的方法(方法重载) 2个参数
public static void closeResource(Statement statement, Connection connection) {
closeStatement(statement);
closeConnection(connection);
}
private static void closeConnection(Connection connection) {
if (connection != null) {
try {
connection.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private static void closeStatement(Statement statement) {
if (statement != null) {
try {
// 空指针异常
statement.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
private static void closeResutSet(ResultSet resultSet) {
if (resultSet != null) {
try {
resultSet.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
2.6 事务安全
需求
雨琦给巴元转账
技术分析
通过Connection操作事务
// 开启事务 关闭自动提交时
public void setAutoCommit(boolean false);
// 提交事务
public void commit();
// 回滚事务
public void rollback()
步骤分析
1 准备表记录
2 编写代码(jdbc)
// 获取连接
// 开启事务
// 创建语句执行者(小货车)
// 雨琦扣钱
// 巴元加钱
// 提交事务
// 回滚事务
// 关闭资源
代码片段
public static void main(String[] args) {
// 声明变量
Connection connection = null;
Statement statement = null;
try {
// 获取连接
connection = JDBCUtils2.getConnection();
// 开启事务
connection.setAutoCommit(false);
// 创建语句执行者(小货车)
statement = connection.createStatement();
// 雨琦扣钱
String sql = "update account set balance = balance -100 where id = 1;";
// 执行雨琦扣钱
int i = statement.executeUpdate(sql);
if (i > 0) {
System.out.println("雨琦扣钱成功");
} else {
System.out.println("雨琦扣钱失败");
}
// 模拟错误
int a = 1 / 0;
// 巴元加钱
String sql2 = "update account set balance = balance +100 where id = 2;";
// 执行巴元加钱
int i2 = statement.executeUpdate(sql2);
if (i2 > 0) {
System.out.println("巴元加钱成功");
} else {
System.out.println("巴元加钱失败");
}
// 提交事务
connection.commit();
} catch (SQLException e) {
e.printStackTrace();
// 回滚事务
try {
connection.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
} finally {
// 关闭资源
JDBCUtils2.closeResource(statement, connection);
}
}
2.7 案例:用户登录
需求
模拟用户登录
需求分析
在控制台输入用户名和密码,根据用户名和密码查询数据库,根据数据库返回结果判断用户是否登录成功
步骤分析
// 在控制台输入用户名和密码 scanner技术
// 根据用户名和密码查询数据库 jdbc技术
// 根据数据库返回结果判断用户是否登录成功 if else技术
代码片段
// idea 中使用@Test 结合scanner 会有bug
public static void main(String[] args) throws Exception {
// 在控制台输入用户名和密码 scanner技术
Scanner scanner = new Scanner(System.in);
System.out.println("欢迎来到德莱联盟");
System.out.println("请输入用户名:");
String username = scanner.nextLine();
System.out.println("请输入密码:");
String password = scanner.nextLine();
// 根据用户名和密码查询数据库 jdbc技术(6步)
Connection connection = JDBCUtils2.getConnection();
// 使用sql字符串进行拼接 是非常繁琐的 代码不方便阅读
String sql = "select * from user where username = '" + username + "' and password = '" + password + "'";
System.out.println(sql);
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
// 根据数据库返回结果判断用户是否登录成功 if else技术
// 我们确定了返回结果集最多为一条记录 可以使用 if判断
if (resultSet.next()) {
System.out.println("登录成功");
} else {
System.out.println("用户名或密码错误");
}
// 关闭资源
JDBCUtils2.closeResource(resultSet, statement, connection);
}
复习
- 能够使用内连接进行多表查询
- 能够使用外连接进行多表查询
- 能够使用子查询进行多表查询
- 能够理解JDBC的概念
- 能够使用DriverManager类
- 能够使用Connection接口
- 能够使用Statement接口
- 能够使用ResultSet接口
最后
以上就是雪白汉堡为你收集整理的mysql:权限&JDBC复习的全部内容,希望文章能够帮你解决mysql:权限&JDBC复习所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复