操作所有数据库的方式
JDBC
概述
JDBC: Java DataBase Connectity —- java数据库的连接文章源自JAVA秀-https://www.javaxiu.com/491.html
是一种专门用于执行SQL语句的Java API,可以为多种关系数据库提供统一的访问,它由一组用Java语言编写的接口组成文章源自JAVA秀-https://www.javaxiu.com/491.html
java代码要想操作各种数据库就得使用JDBC文章源自JAVA秀-https://www.javaxiu.com/491.html
JDBC的由来
JDBC规范定义接口,具体的实现由各大数据库厂商来实现 ,JDBC是Java访问数据库的标准规范。真正怎么操作 数据库还需要具体的实现类,也就是数据库驱动(第三方JAR包)。每个数据库厂商根据自家数据库方式编写好自己数据库的驱动。所以我们只需要会调用JDBC接口中的方法即可。数据库驱动由数据库厂商提供。文章源自JAVA秀-https://www.javaxiu.com/491.html
我们在用java代码操作数据库时只需要会使用JDBC接口中的方法即可,使用简单文章源自JAVA秀-https://www.javaxiu.com/491.html
入门案例-使用java代码对数据库进行数据插入
前提:操作哪个数据库就需要导入哪个数据库的驱动包文章源自JAVA秀-https://www.javaxiu.com/491.html
jdbc的使用步骤:文章源自JAVA秀-https://www.javaxiu.com/491.html
1.加载驱动文章源自JAVA秀-https://www.javaxiu.com/491.html
2.获取连接文章源自JAVA秀-https://www.javaxiu.com/491.html
3.编写sql文章源自JAVA秀-https://www.javaxiu.com/491.html
4.获取语句的执行者文章源自JAVA秀-https://www.javaxiu.com/491.html
5.执行sql并返回结果集文章源自JAVA秀-https://www.javaxiu.com/491.html
6.处理结果集文章源自JAVA秀-https://www.javaxiu.com/491.html
7.释放资源文章源自JAVA秀-https://www.javaxiu.com/491.html
// 使用java代码操作数据库做添加 public class HelloJdbc { @Test public void saveTest() throws ClassNotFoundException, SQLException { // 条件:操作谁就要导入谁的驱动包 mysql驱动包右键选择Add as Library //1 用反射方式加载驱动(mysql5.0后可以不写,静态代码块,浪费) //Class.forName("com.mysql.jdbc.Driver"); //2 获取数据库的连接 Connection connection = DriverManager.getConnection ("jdbc:mysql://localhost:3306/db4", "root", "root"); //3 获取执行sql语句的对象 Statement statement = connection.createStatement(); //4 编写sql语句 String sql="INSERT INTO account VALUES(NULL,'rose2',1000)"; //5 执行sql语句 // 返回值:数据库受影响的行数 int count = statement.executeUpdate(sql); System.out.println(count); //6 释放资源 statement.close(); connection.close(); }
JDBC API详解
DriverManager:类
方法作用:文章源自JAVA秀-https://www.javaxiu.com/491.html
1 加载驱动文章源自JAVA秀-https://www.javaxiu.com/491.html
static void registerDriver(Driver driver) 底层加载驱动了2次 不建议使用 反射: Class.forName("com.mysql.jdbc.Driver") 底层加载驱动了1次
2 获取数据库连接的对象文章源自JAVA秀-https://www.javaxiu.com/491.html
static Connection getConnection(String url, String user, String password); Url:数据库的地址 固定格式:jdbc:要连的数据库://数据库地址:端口号/哪个数据库 user:数据库的用户名 Password:数据库的密码 如果数据出现乱码需要加上参数: ?characterEncoding=utf8,表示让数据库以UTF-8编码来处理数据。 如: jdbc:要连的数据库://数据库地址:端口号/哪个数据库?characterEncoding=utf8
Connection:接口
方法作用:文章源自JAVA秀-https://www.javaxiu.com/491.html
1 可以获取执行SQL语句的对象(语句执行者)文章源自JAVA秀-https://www.javaxiu.com/491.html
Statement createStatement();获取语句的执行者 --(不安全) PreparedStatement prepareStatement();获取语句的执行者 --用它
2 操作事务文章源自JAVA秀-https://www.javaxiu.com/491.html
void setAutoCommit(boolean autoCommit) ; ---start Transaction false:开启事务, ture:关闭事务(默认) void commit(); ---commit 提交事务 void rollback(); ---rollback 回滚事务
Statement:接口
方法作用:文章源自JAVA秀-https://www.javaxiu.com/491.html
1 执行sql语句文章源自JAVA秀-https://www.javaxiu.com/491.html
executeUpdate() 执行的是增删改语句文章源自JAVA秀-https://www.javaxiu.com/491.html
返回值是int类型 代表受影响的行数文章源自JAVA秀-https://www.javaxiu.com/491.html
executeQuery() 执行的是查询语句文章源自JAVA秀-https://www.javaxiu.com/491.html
返回的值是ResultSet类型对象 称为:结果集对象文章源自JAVA秀-https://www.javaxiu.com/491.html
Resultset:接口
方法作用:文章源自JAVA秀-https://www.javaxiu.com/491.html
1 封装查询语句的结果集文章源自JAVA秀-https://www.javaxiu.com/491.html
next() 可以让指针向下移动一行 默认在第一行之前 返回值是boolean true:代表有数据 false: 代表没数据文章源自JAVA秀-https://www.javaxiu.com/491.html
2 获取结果集中每一行的数据文章源自JAVA秀-https://www.javaxiu.com/491.html
get类型(int 列的位置)文章源自JAVA秀-https://www.javaxiu.com/491.html
get类型(String 列名)文章源自JAVA秀-https://www.javaxiu.com/491.html
编写JDBC的工具类实现数据的增删改查
工具类:可以将一些重复的代码进行抽取封装,以便于复用,简化代码开发文章源自JAVA秀-https://www.javaxiu.com/491.html
通过上面代码的编写会发现每次去执行SQL语句都需要注册驱动,获取连接,以及释放资源。 发现很多重复的劳动,我们可以将重复的代码抽取出来定义一个工具类,直接调用方法,可以简化代码。文章源自JAVA秀-https://www.javaxiu.com/491.html
那么我们接下来定义一个JDBCUtils 类。把注册驱动,获取连接,以及释放资源的代码放到这个类的方法 中。以后直接调用该工具类的方法即可。文章源自JAVA秀-https://www.javaxiu.com/491.html
JDBC 操作事务
Connection: void setAutoCommit(boolean autoCommit) ; false:开启事务 ture:关闭事务(默认的) void commit(); 提交事务 void rollback(); 回滚事务 ps:在使用手动事务时,必须要抓取异常,在catch块中进行回滚事务. 只要有事务,就必须try,catch捕捉处理 查询有没有事务都行
需求:使用JDBC的事务操作完成转账案例文章源自JAVA秀-https://www.javaxiu.com/491.html
模拟用户登录功能
需求: 我们在控制台输入用户名和密码,输入完用户名和密码后,获取输入的值,使用jdbc操作数据库,完成登录功能. 找到了:登录成功 找不到:用户名或密码错误 技术分析: jdbc 代码实现: 创建用户表: create table user ( id int primary key auto_increment, name varchar(20), password varchar(20) ); insert into user values(null,"tom","111"),(null,"rose","222"),(null,"jack","333");
总结
jdbc:是java提供的一套规范,java代码操作数据库的桥梁 java代码要想操作数据库一定得使用jdbc jdbcTemplate dbutils mybatis hibernate jdbc的操作:固定步骤 1 加载驱动 2 获取连接 3 获取语句执行者 4 编写sql语句 5 执行sql语句 6 处理结果集 (查询特有) 7 释放资源 自定义了一个jdbc工具类: 把127这三个步骤抽到了工具类中,以便与复用 (作业) jdbc中的数据事务控制:Connection setAUtoCommit(boolean) false:手动 true:自动 commmit() 手动提交 rollback() 数据回滚 ps:只要涉及事务就必须try catch 作业:使用jdbc的工具类完成登录案例 使用jdbc的工具类完成转账案例
DCL (了解)
#DCL语句(了解) #创建用户 #命令格式:CREATE USER '用户名'@'主机地址' IDENTIFIED BY '密码'; CREATE USER 'tom'@'localhost' IDENTIFIED BY '123'; #默认没有任何权限 什么都做不了 #tom用户分配权限 #命令格式:GRANT 权限1, 权限2... ON 数据库名.表名 TO '用户名'@'主机名'; GRANT ALL ON db3.* TO 'tom'@'localhost'; #查看权限 #命令格式 SHOW GRANTS FOR '用户名'@'主机名'; SHOW GRANTS FOR 'tom'@'localhost' #撤销权限 #命令格式:REVOKE 权限1, 权限2... ON 数据库.表名 FROM '用户名'@'主机名'; REVOKE ALL ON db3.* FROM 'tom'@'localhost'; #给普通用户修改密码 #特点:需要root用户先登录 再使用命令去修改普通用户的密码 #格式:set password for '用户名'@'主机名' = password('新密码'); #删除用户 #命令格式:DROP USER '用户名'@'主机名'; DROP USER 'tom'@'localhost'; #给root用户修改密码 #特点:不需要登录 直接操作命令即可 #格式:mysqladmin -uroot -p password 新密码文章源自JAVA秀-https://www.javaxiu.com/491.html

评论