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
1. JDBC简介
-
什么是JDBC:Sun公司提供的一套规范(接口),由一堆接口和工具类组成的,可以让Java用来调用操作数据库
-
JDBC的作用:实现了Java程序对不同数据库的统一操作
-
数据库驱动:由数据库厂商提供的,是JDBC规范的实现类,打包形成的jar包,叫数据库驱动包
-
要操作什么数据库,就必须有什么数据库的驱动包
-
2. ==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:数据库的密码
-
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是数据类型
-
-
注意:一定要先向下移动一次行指针,才可以获取到数据;否则会报错
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();
4. 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 列名称)
-
-
-
JDBC的事务管理
-
相关的API
-
开启事务:
connection.setAutoCommit(false)
-
提交事务:
connection.commit()
-
回滚事务:
connection.rollback()
-
-
事务管理的步骤
-
加强练习:
通过JDBC+scanner,完成添加员工信息的功能