JDBC (B站动力节点杜老师)
1.JDBC是什么
2.jdbc的本质是什么?
多态:
Animal a = new Cat ( ) --》面向抽象编程
父类型的引用 指向 子类型的对象
3.开发前准备工作
4.jdbc 过程
注册驱动方式两种
使用资源绑定器绑定属性配置文件
URL解析
5.遍历结果集
idea
导入.jar包
字符串中拼变量
(sql)单引号中 加双引号 加两个加号++ 加号里面加变量
PreparedStatement预编译
查(SELECT)
第四步用 rs = ps.executeQuery(“字段”);
增删改(INSERT DELETE UPDATE)
第四步用 rs= ps.executeUpdate(“字段”);
框架(select)
public static void main(String[] args){
Connection conn = null;
PreparedStatement ps = null;//加d是名词
ResultSet rs = null;
try {
//1.注册驱动
Class.forName("com.mysql.cj.jdbc.Driver");
//2.获取连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/wodeshuju?useSSL=false&serverTimezone=UTC","root","3615yuhaijiao");
//3.获取预编译的数据库操作对象
String sql = "select * from student";
ps = conn.prepareStatement(sql);//动词
//4.执行sql语句
rs = ps.executeQuery();//查询select
//rs = ps.executeUpdate();//增删改都是用Update(INSERT DELETE UPDATE)
//5.处理查询结果集
} catch (Exception e) {
e.printStackTrace();
}finally {
//6.释放资源
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (ps != null) {
try {
ps.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
事务三件套 (开启 提交 回滚)
conn.setAutoCommit(false); 关闭自动提交 开启事务
conn.commit(); 手动提交
conn.rollback(); catch中写 回滚
if(conn != null){
try{
conn.rollback();
}catch(sqlException e1){
e1.printStackTrace();
}
}
6.工具类封装
package utils;
import java.sql.*;
/*
* JDBC工具类,简化JDBC编程
* */
public class DBUtil {
/*工具类中的构造方法都是私有的,以为工具类当中的方法都是静态的
不需要new对象,直接采用类名调用。*/
private DBUtil(){}
//静态代码块在类加载时执行,并且只执行一次。
static {
try {
Class.forName("com.mysql.cj.jdbc.Driver");
} catch (ClassNotFoundException e) {
e.printStackTrace();
}
}
public static Connection getConnection() throws SQLException{
//获取数据库连接对象,返回连接对象
return DriverManager.getConnection("jdbc:mysql://localhost:3306/wodeshuju?useSSL=false&serverTimezone=UTC"
,"root","131138");
}
//关闭资源,conn:连接对象,ps:数据库操作对象 rs:结果集
public static void close(Connection conn, Statement ps, ResultSet rs){
if(rs!=null){
try {
rs.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if(ps!=null){
try {
ps.close();
}catch (SQLException e){
e.printStackTrace();
}
}
if(conn!=null){
try {
conn.close();
}catch (SQLException e){
e.printStackTrace();
}
}
}
}
7.JDBC实现模糊查询
package utils;
import javax.swing.text.html.HTMLWriter;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
/*
* 1.测试DBUtil是否好用
* 2.模糊查询怎么写?
* */
public class JDBCTest9 {
public static void main(String[] args) throws SQLException {
Connection conn=null;
PreparedStatement ps=null;
ResultSet rs=null;
try {
//获取连接
conn= DBUtil.getConnection();
//获取预编译的数据库操作对象
//错误写法
/* String sql="select ename from emp where name like '_?%'";
ps=conn.prepareStatement(sql);
ps.setString(1,'A');*/
String sql="select ename from emp where name like ?";
ps=conn.prepareStatement(sql);
ps.setString(1,"_A%");
rs=ps.executeQuery();
while (rs.next()){
System.out.println(rs.getString("ename"));
}
}catch (SQLException e){
e.printStackTrace();
}finally {
//释放资源
DBUtil.close(conn,ps,rs);
}
}
}
8.行级锁 (for Update)
悲观锁:事务没结束之前,事务必须排队,一整行记录不准改动,不允许并发。
乐观锁:支持并发,事务不排队,需要一个版本号。一个事务发现前后的版本号不一致了 就执行回滚操作 ,本次操作不执行。
————————————————
版权声明:本文为CSDN博主「暴走的山交」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/qq_43649223/article/details/106755584