本文是依据B站能源节点老杜的视频教程做的笔记,教程中解说了Java语言如何连贯数据库,对数据库中的数据进行增删改查操作,适宜于曾经学习过Java编程根底以及数据库的同学。Java教程中论述了接口在开发中的真正作用,JDBC标准制订的背景,JDBC编程六部曲,JDBC事务,JDBC批处理,SQL注入,行级锁等。

1、JDBC是什么?

Java DataBase Connectivity(Java语言连贯数据库)

2、JDBC的实质是什么?

JDBC是SUN公司制订的一套接口(interface)

java.sql.*; (这个软件包下有很多接口。)

接口都有调用者和实现者。

面向接口调用、面向接口写实现类,这都属于面向接口编程。

为什么要面向接口编程?

解耦合:升高程序的耦合度,进步程序的扩大力。

多态机制就是十分典型的:面向形象编程。(不要面向具体编程)

倡议:
Animal a = new Cat();
Animal a = new Dog();
// 喂养的办法
public void feed(Animal a){ // 面向父类型编程。

}

不倡议:
Dog d = new Dog();
Cat c = new Cat();

思考:
为什么SUN制订一套JDBC接口呢?
因为每一个数据库的底层实现原理都不一样。
Oracle数据库有本人的原理。
MySQL数据库也有本人的原理。
MS SqlServer数据库也有本人的原理。
....
每一个数据库产品都有本人独特的实现原理。

JDBC的实质到底是什么?
一套接口。

3、JDBC开发前的筹备工作,先从官网下载对应的驱动jar包,而后将其配置到环境变量classpath当中。
classpath=.;D:\course\06-JDBC\resources\MySql Connector Java 5.1.23\mysql-connector-java-5.1.23-bin.jar

以上的配置是针对于文本编辑器的形式开发,应用IDEA工具的时候,不须要配置以上的环境变量。
IDEA有本人的配置形式。

4、JDBC编程六步(须要背会)

  • 第一步:注册驱动(作用:通知Java程序,行将要连贯的是哪个品牌的数据库)
  • 第二步:获取连贯(示意JVM的过程和数据库过程之间的通道关上了,这属于过程之间的通信,重量级的,应用完之后肯定要敞开通道。)
  • 第三步:获取数据库操作对象(专门执行sql语句的对象)
  • 第四步:执行SQL语句(DQL DML....)
  • 第五步:解决查问后果集(只有当第四步执行的是select语句的时候,才有这第五步解决查问后果集。)
  • 第六步:开释资源(应用完资源之后肯定要敞开资源。Java和数据库属于过程间的通信,开启之后肯定要敞开。)


注册驱动形式两种

URL解析

5.遍历后果集


idea
导入.jar包


视频教程整起:
https://www.bilibili.com/video/BV1Bt41137iB
字符串中拼变量
(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/codeyuaiiao?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8","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();

}

}

行级锁 (for Update)

  • 乐观锁:事务没完结之前,事务必须排队,一整行记录不准改变,不容许并发。
  • 乐观锁:反对并发,事务不排队,须要一个版本号。一个事务发现前后的版本号不统一了 就执行回滚操作 ,本次操作不执行。