JDBC 学习笔记1

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本质
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
4.JDBC开发前的准备工作
先从官网下载对应的驱动jar包,然后将其配置到环境变量classpath当中
classpath=.;D:\course\06-JDBC\resources\MySql Connector Java 5.1.48\mysql-connector-java-5.1.48-bin.jar
以上的配置是针对于文本编辑器的方式开发,使用IDEA工具的时候,不需要配置以上的环境变量。
IDEA有自己的配置方式,具体可以百度寻找。

5.JDBC编程六步(需要背会)
第一步:注册驱动(作用:告诉Java程序,即将要连接的是哪个品牌的数据库)
第二步:获取连接(表示JVM的进程和数据库进程之间的通道打开了,这属于进程之间的通信,重量级的,使用完之后一定要关闭通道。)
第三步:获取数据库操作对象(专门执行sql语句的对象)
第四步:执行SQL语句(DQL DML…)
第五步:处理查询结果集(只有当第四步执行的是select语句的时候,才有这第五步处理查询结果集。)
第六步:释放资源(使用完资源之后一定要关闭资源。Java和数据库属于进程间的通信,开启之后一定要关闭。)

url:统一资源定位符(网络中某个资源的绝对路径)
https://www.baidu.com/ 这就是URL
URL包括哪几部分?
协议,IP,Port,资源名

http://182.61.200.7:80/index.html
http:// 通信协议
182.61.200 服务器IP地址
80:服务器上软件的端口
index.html 是服务器上某个资源名

jdbc:mysql://localhost:3306/ourleetcode
jdbc:mysql:// 协议
localhost即127.0.0.1 IP地址
3306 mysql数据库端口号
ourleetcode具体的数据库实例名

什么是通信协议?有什么用?
通信协议是通信之前就提前定好的数据传送格式。数据包具体怎么传数据,格式是提前定好的。

7.第一个程序

package test;

import java.sql.*;

//jdbc编程六步
public class jdbcTest01 {
    public static void main(String[] args) {
        Connection con = null;
        Statement stmt = null;
        try {
            //1.注册驱动
            Driver driver = new com.mysql.cj.jdbc.Driver(); //注意mysql8.0以上版本要这么写,8.0以下版本写com.mysql.jdbc.Driver()
            DriverManager.registerDriver(driver);
            //2.获取连接
            String url = "jdbc:mysql://192.168.1.20:3306/ourleetcode?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT"; //8.0以下版本不写ourleetcode后面的东西。ourleetcode是我自己数据库的名字
            String user = "mc_class"; 
            String password = "123456";
            con = DriverManager.getConnection(url, user, password);
            System.out.println("数据库连接对象 = " + con);
            //3.获取数据库操作对象(Statement专门执行sql语句的)
            stmt = con.createStatement();
            //4.执行sql
            String sql = "insert into test(神魔恋) values('你好')";
            //专门执行DML语句的(insert, delete, update)
            //返回值是影响数据库中的记录条数
            int count = stmt.executeUpdate(sql);
            System.out.println(count == 1 ? "保存成功" : "保存失败");

            //5.处理查询结果集
        }
        catch(SQLException e) {
            e.printStackTrace();
        }
        finally {
            //6.释放资源
            //为了保证资源一定释放,在finally语句块中关闭资源
            //并且要遵循从小到大依次关闭(先关闭stmt,然后关闭con)
            //分别对其try...catch
            try {
                if(stmt != null)
                    stmt.close();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(con != null)
                    con.close();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

在navicat中查看发现已经插入成功了。
一定要熟记jdbc流程,要做到能够快速默写。

8.第二个程序

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;

public class jdbcTest02 {
    public static void main(String[] args) {
        Connection con = null;
        Statement stmt = null;
        try {
            //1.注册驱动
            DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver());
            //2.获取连接
            con = DriverManager.getConnection("jdbc:mysql://localhost:3306/ourleetcode?" +
                    "useUnicode=true&characterEncoding=utf8&serverTimezone=GMT", "root", "123456");
            //3.获取数据库操作对象
            stmt = con.createStatement();
            //4.执行sql语句
            //注意jdbc中的sql语句不需要提供分号结尾
            String sql = "delete from test where 神魔恋='你好'";
            int count = stmt.executeUpdate(sql);
            System.out.println(count == 1 ? "删除成功" : "删除失败");
        }
        catch (SQLException e) {
            e.printStackTrace();
        }
        finally {
            try {
                if(stmt != null)
                    stmt.close();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(con != null)
                    con.close();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

在navicat中查看发现已经删除成功了。

9.注册驱动的常用方法
DriverManager.registerDriver(new com.mysql.cj.jdbc.Driver()); 是注册驱动的第一种写法
下面说下第二种写法,也是常用写法:
Class.forName(“com.mysql.cj.jdbc.Driver”);
为什么这种方式常用?因为参数是一个字符串,字符串可以写到xxx.properties文件中,这种方法不需要接收返回值,因为我们只想用它的类加载动作。

10.从属性资源文件中读取连接数据库信息
将连接数据库的所有信息配置到配置文件中,实际开发中不建议将连接数据库的信息写死到java程序中。因为你给客户开发一个程序,人家客户是不可能把数据库的密码之类的隐私数据告诉你的,但是你可以调用他的配置文件,这样既看不到隐私信息,又完成了任务。
首先我们在IDEA的src目录下新建一个JDBC.properties
在里面输入:
driver=com.mysql.cj.jdbc.Driver
url=
user=
password=
具体的写法和上面我给的代码演示是一样的,写入你自己的配置就行。

package test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.Collections;
import java.util.ResourceBundle;

public class jdbcTest03 {
    public static void main(String[] args) {
        //使用资源绑定器绑定属性配置文件
        ResourceBundle bundle = ResourceBundle.getBundle("JDBC");
        String driver = bundle.getString("driver");
        String url = bundle.getString("url");
        String user = bundle.getString("user");
        String password = bundle.getString("password");
        Connection con = null;
        Statement stmt = null;
        try {
            //1.注册驱动
            Class.forName(driver);
            //2.获得连接
            con = DriverManager.getConnection(url, user, password);
            //3.获取数据库操作对象
            stmt = con.createStatement();
            //4.执行sql语句
            String sql = "update test set 李在赣神魔='你好呀' where 李在赣神魔='喝车别开酒'";
            int count = stmt.executeUpdate(sql);
            System.out.println(count == 1 ? "修改成功" : "修改失败");
        }
        catch (Exception e) {
            e.printStackTrace();
        }
        finally {
            try {
                if(stmt != null)
                    stmt.close();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
            try {
                if(con != null)
                    con.close();
            }
            catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

在navicat中查看发现已经修改成功了。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值