黑马JavaWeb+AI笔记 Day05 Web后端基础(JDBC)
✅JDBC是什么?
- 全称:(JavaDataBaseConnectivity)Java数据库连接
- 概念:使用Java语言操作关系型数据库的一套API
✅JDBC本质
- 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口
- 各个数据库厂商去实现这套接口,提供数据库驱动jar包
- 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类
✅JDBC好处
- 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发
- 可随时替换底层数据库,访问数据库的Java代码基本不变
✅JDBC流程
创建工程
注册驱动
获取连接
定义SQL语句
获取执行SQL对象
执行SQL
处理返回结果
释放资源
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");//2.获取连接
String url = "jdbc:mysql://127.0.0.1:3306/db1";
String username = "root";
String password = "1234";
Connection conn = DriverManager.getConnection(url, username, password);//3.定义sql
String sql = "update account set money = 2000 where id = 1";//4.获取执行sqL的对象Statement
Statement stmt = conn.createStatement();//5.执行sql
int count = stmt.executeUpdate(sqL);//受影响的行数//6.处理结果
System.out.println(count);//7.释放资源
stmt.close();
conn.close();
✅JDBC API 详解
DriverManager
- 注册驱动(可以省略)
Driver 类中存在静态代码块使用DriverManager.rigisterDriver()方法
- 获取数据库连接
getConnection(String url, String username, String password)
url:jdbc:mysql:///数据库名?参数键值对
Connection
- 获取执行SQL对象
//普通执行SQL对象
Statement createStatement()
//预编译SQL的执行SQL对象:防止SQL注入
PreparedStatement prepareStatement(sql)
//执行存储过程的对象
CallableStatement prepareCall(sql)
- 管理事务
开启事务:setAutoCommit(booleanautoCommit):true为自动提交事务;false为手动提交事务,即为开启事务
提交事务:commit()
回滚事务:rollback()
Statement
- 执行SQL语言
int executeUpdate(sql): 执行DML、DDL语句
返回值:1.DML语句影响的行数 2.DDL语句执行后,执行成功也可能返回0
ResultSet executeQuery(sql): 执行DQL语句
返回值:ResultSet 结果集对象
ResultSet
- 封装了DQL查询语句的结果
ResultSet stmt.executeQuery(sql):执行DQL语句,返回ResultSet对象
booleannext():(1) 将光标从当前位置向前移动一行(2) 判断当前行是否为有效行
返回值:true:有效行,当前行有数据 false:无效行,当前行没有数据
xxx getXxx(参数):获取数据
xxx:数据类型;如:int getlnt(参数);String getString(参数)
参数:
int:列的编号,从1开始
String:列的名称
PreparedSteatement
- 预编译SQL并执行SQL语句
①获取PreparedStatement对象
//SQL语句中的参数值,使用?占位符替代
String sql ="select * from user where username = ? and password = ?";//通过Connection对象获取,并传入对应的sql语句
PreparedStatement pstmt = conn.prepareStatement(sql);
②设置参数值
PreparedStatement对象:setXxx(参数1,参数2):给?赋值
Xxx:数据类型;如setlnt(参数1,参数2)
参数:
参数1:?的位置编号,从1开始
参数2:?的值
③执行SQL
executeUpdate();/executeQuery();:不需要再传递sql