概述
1. DCL语句
- 根据不同项目建立不同的用户,分配不同的权限来管理和维护数据库
1.1 创建用户
- CREATE USER '用户名'@'主机名' IDENTIFIED BY '密码';
其中:
用户名:创建的用户名;
主机名:指定该用户在哪个主机上可以登录。若本地用户用localhost,若可从任意远程主机登录则可使用通配符%;
密码:该用户的登录密码,可以为空
1.2 授权用户
用户在创建之后基本没有权限,需要授权:
- GRANT 权限1,权限2... ON 数据库名.表名 TO '用户名'@'主机名';
其中:
GRANT:授权关键字;
授予用户的权限:有SELECT(查看), INSERT(插入), UPDATE(修改)等。若授予全部权限使用ALL;
数据库名.表名:用户可操作哪个数据库的哪些表;全部的则用*
'用户名'@'主机名':给哪个用户授权。
1.3 撤销授权
- REVOKE 权限1,权限2... ON 数据库名.表名 TO '用户名'@'主机名';
其中:
GRANT:撤销授权关键字;其余含义与授权一致。
1.4 查看权限
- SHOW GRANTS FOR '用户名'@'主机名';
1.5 删除用户
- DROP USER '用户名'@'主机名';
1.6 修改用户密码
1.6.1 修改管理员密码
需要使用MySQL自带的工具mysqladmin
mysqladmin -uroot -p password 新密码
#回车后输入老密码
注意:需要在未登录MySQL的情况下操作
另外这是在命令行中操作
1.6.2 修改普通用户密码
- set password for '用户名'@'主机名' = password('新密码');
注意:1、需要登录MySQL的情况下操作;2、新密码要用引号括住
另外这是在命令行中操作
2. JDBC的概念及由来
2.1 JDBC概念
- JDBC(Java数据库连接):是Java访问数据库的标准规范
- 作用:用于执行SQL语句的Java API(Java语言通过JDBC可操作数据库)
2.2 JDBC由来
JDBC规范定义接口,数据库驱动由数据库厂商提供。
好处
- 调用JDBC接口中的方法即可
- 使用同一套Java代码,进行少了修改即可访问其他数据库
JDBC会用到的包:java.sql、javax.sql、数据库驱动
JDBC四个核心对象
- DriverManager:用于注册驱动,获得连接
- Connection:表示与数据库创建的连接
- Statement:执行SQL语句,并返回相应的结果对象
- ResultSet:结果集/虚拟表
3. JDBC获取连接
- 获取连接步骤:1.导入驱动Jar包,2.注册驱动,3.获取连接
3.1 导入驱动包
步骤:
- 下载数据库对应驱动jar包;
- 在当前模块新建文件夹(lib),复制jar进去
- 在IDEA的界面找到该jar包,右键选择
add as library
,让模块关联jar包(选择model library,但智能在当前jar包中使用)
3.2 注册/加载驱动类
- static void registerDriver(Driver driver); 向Driver driver注册指定驱动程序
两种注册方式:
- 静态方法注册
DriverManager.registerDriver(new com.mysql.jdbc.Driver());
不足:
1、硬编码,后期不易于程序扩展和维护
2、驱动被注册两次
3、更换驱动类的时候不好更换,需要修改源代码
- 类加载(推荐使用)
Class.forName("com.mysql.jdbc.Driver");
特点:
1、使用forName()方法加载,走Driver类的静态代码块
2、驱动仅注册一次
3、虽然在JDK1.5后可以省略该语句,但是建议不省略,以防不兼容问题
3.3 获取连接
- static Connection getConnection(String url, String user, String password); //连接到给定数据库URL并返回连接
其中:
String url:连接数据库的URL,格式为`协议名:自协议://服务器名或IP地址:端口号/数据库名?参数=参数值`,比如`jdbc:mysql://localhost:3306/test`
String user:数据库的账号
String password:数据库的密码
注意:
1、如果数据出现乱码需加上参数
?characterEncoding=utf8
;2、Connection实现类对象导包时要导sun公司的包
4. JDBC实现对单表数据操作
4.1 JDBC实现对单表数据增删改
4.1.1 使用方法:
java.sql.Connection
接口中获得statement对象:
- Statement createStatement();
创建一个Statement对象来将SQL语句发送到数据库
Statement的方法:
- 执行增删表的SQL语句的方法:
- boolean execute(String sql);执行任意SQL语句。
返回值表示是否有返回ResultSet结果集。仅当执行select语句且有返回结果时返回true,其它语句返回false
2. 执行增删改SQL语句的方法:
- int executeUpdate(String sql);
根据执行的DML(INSERT、UPDATE、DELETE)语句,返回受影响的行数
- 关闭资源
- void close(); 关闭并释放资源
4.1.2 疑问与解答
Q:statement对象使用完之后需要关闭,为何?它关闭了什么?
A:因为statement对象会占用数据库连接个数,而该连接数的数量是有限的,需要关闭该对象与数据库的连接,释放该连接数。
4.2 JDBC实现对单表数据查询
ResultSet
(结果集)用于保存执行查询SQL语句的结果。只能一行行取出,不能一次性取出所有数据。执行查询SQL语句的方法
- ResultSet executeWQuery(String sql);
根据查询语句返回结果集,只能执行SELECT语句
ResultSet
需要使用到的方法:- boolean next(); 将结果集的指针从当前位置下移一个单元,如可移动返回true,否则false
- xxx getXxx(String columnLabel);通过字段名获得对应的数据(columnLabel列名) - xxx getXxx(int columnIndex);通过字段序号获得对应的数据(columnIndex列序号)
其中xxx指数据类型,有boolean、byte、short、long、float、double、String等
注意:ResultSet使用完毕后必须要关流
JDBC对单表数据增删改查步骤
- 注册驱动;
- 获取连接;
- 准备SQL执行语句;
- 获取到Statement;
- 使用Statement执行SQL;
- ResultSet处理结果;
- 关闭资源。
4.3 JDBC实现单表操作示例代码
需求:对单表数据增删改及查询操作
public class Notes01 {
public static void main(String[] args) throws Exception {
//加载驱动
Class.forName("com.mysql.jdbc.Driver");
//获取连接
String url = "jdbc:mysql:///test";
String user = "root";
String password = "root";
Connection connection = DriverManager.getConnection(url, user, password);
//获得sql运输器
Statement st = connection.createStatement();
//创建新表的SQL语句
String sql1 = "create table student(id int primary key,name varchar(10))";
boolean bo = st.execute(sql1);
System.out.println("sql1语句执行后返回值=" + bo);
//对数据库的表添加数据:
String sql2 = "insert into student(name) values('小明','小黄')";
int num2 = st.executeUpdate(sql2);
System.out.println("影响的行数:" + num2);
//对数据库的表删除数据
String sql3 = "delete from student where name = '小明'";
int num3 = st.executeUpdate(sql3);
System.out.println("影响的行数:" + num3);
//更新表中的数据
String sql4 = "update student set name = '小明' where name = '小黄'";
int num4 = st.executeUpdate(sql4);
System.out.println("影响的行数:" + num4);
//查询表中数据并返回
String sql5 = "select * from student;";
//获得结果集
ResultSet rs = st.executeQuery(sql5);
while (rs.next()) {
//取出数据
int id = rs.getInt("id");
String name = rs.getString("name");
System.out.println(id + "=" + name);
}
//关闭资源,先开后关,后开先关
rs.close();
st.close();
connection.close();
}
}
4.4 JDBC获取连接与关闭连接工具类实现
- 可自定义一个工具类,将经常重复的代码(注册驱动、获取连接,得到Statement和释放资源)放在这个类的方法中。然后可直接调用其中方法完成重复代码。
/*
自定义JDBC工具类
*/
public class JDBCUtils {
/*
之后会从配置文件读取信息,现在先用常量表示
*/
public static final String DRIVERCLASS = "com.mysql.jdbc.Driver";
public static final String URL = "jdbc:mysql:///test";
public static final String USER = "root";
public static final String PASSWORD = "root";
/*
由于每个人获取连接时都要加载驱动类,但驱动类只要加载一次便可,故使用静态代码块
*/
static {
try {
Class.forName(DRIVERCLASS);
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
//获取连接
public static Connection getConnection() {
Connection connection = null;
try {
connection = DriverManager.getConnection(URL, USER, PASSWORD);
return connection;
} catch (SQLException e) {
e.printStackTrace();
}
return connection;
}
//获取Statement
public static Statement getStatement(Connection connection) {
Statement statement = null;
try {
statement = connection.createStatement();
return statement;
} catch (SQLException e) {
e.printStackTrace();
}
return statement;
}
//释放资源
public static void close(ResultSet rs , Statement st , Connection con) {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (st != null) {
try {
st.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (con != null) {
try {
con.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
5. JDBC事务
Connection
接口中与事务有关的方法
- void setAutoCommit(boolean autoCommit) throws SQLException;
false:开启事务,true:关闭事务
- void commit() throws SQLException; 提交事务
- void rollback() throws SQLException; 回滚事务
- 操作步骤
- 注册驱动;
- 获取连接;
- 获取到Statement;
- 开启事务;
- 使用Statement执行SQL;
- 提交或回滚事务;
- 关闭资源。
public class Notes02 {
public static void main(String[] args) throws SQLException {
Connection con = null;
try {
//获取连接
Class.forName("com.mysql.jdbc.Driver");
con= DriverManager.getConnection("jdbc:mysql:///test","root","root");
//开启事务
con.setAutoCommit(false);
//获得sql运输器
Statement st = con.createStatement();
//执行事务
String sql1 = "update account set money = money+500 where name ='小明';";
String sql2 = "update account set money = money-500 where name ='小黄';";
//提交语句
st.executeUpdate(sql1);
st.executeUpdate(sql2);
System.out.println("已成功执行事务");
} catch (Exception e) {
System.out.println("事务执行失败");
con.rollback();
}
}
}
最后
以上就是满意口红为你收集整理的数据库-DCL语句及JDBC的全部内容,希望文章能够帮你解决数据库-DCL语句及JDBC所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
发表评论 取消回复