记录自己学JDBC的第一天

本文介绍了JDBC的基础知识,包括JDBC的作用、API接口如DriverManager、Driver、Connection、Statement、PreparedStatement和CallableStatement,以及JDBC程序的编写步骤。通过实例展示了JDBC如何简化Java程序与数据库的交互,并探讨了不同连接方式,强调了Driver类的静态代码块在注册驱动中的作用。
摘要由CSDN通过智能技术生成

JDBC(Java Database Connectivity)介绍

首先先介绍一下什么是JDBC?

1、 JDBC即Java数据库连接,是java语言中用来规范客户端程序如何来访问数据库应用程序接口,提供了诸如查询和更新数据库中数据的方法。(百度百科)
2、JDBC为访问不同的数据库提供了统一的途径,为开发者屏蔽了一些细节问题。
3、JDBC的目标是使Java程序员使用JDBC可以连接任何提供了JDBC驱动程序的数据库系统,这样就使得程序员无须对特定的数据库系统有过多的了解,从而大大简化和加快了开发的过程。

没有JDBC,Java程序访问数据库是是这样的:
在这里插入图片描述

有了JDBC,Java程序访问数据库时是这样的:
在这里插入图片描述
但其实真实的连接是这样的:
在这里插入图片描述
所以总体来说,JDBC是一组规范:接口。为访问不同数据库提供了统一的途径。


JDBC API (Application Programming Interface)—JDBC应用程序接口

JDBC API主要位于JDK中的java.sql包中(之后扩展的内容位于javax.sql包中),主要包括(斜体代表接口,需驱动程序提供者来具体实现):
DriverManager:负责加载各种不同驱动程序(Driver),并根据不同的请求,向调用者返回相应的数据库连接(Connection)。
Driver驱动程序,会将自身加载到DriverManager中去,并处理相应的请求并返回相应的数据库连接(Connection)。
Connection数据库连接,负责与进行数据库间通讯,SQL执行以及事务处理都是在某个特定Connection环境中进行的。可以产生用以执行SQL的Statement。
Statement:用以执行SQL查询和更新(针对静态SQL语句和单次执行)。但是存在sql注入问题,所以最好使用PareparedStatement来进行动态的操作。
PreparedStatement:用以执行包含动态参数的SQL查询和更新(在服务器端编译,允许重复执行以提高效率)。也就是所说的预编译处理。但是PreparedStatement extends Statement
CallableStatement:用以调用数据库中的存储过程。SQLException:代表在数据库连接的建立和关闭和SQL语句的执行过程中发生了例外情况(即错误)。


JDBC程序的编写步骤
在这里插入图片描述
首先需要导入相关的jar包。主要是指
在这里插入图片描述

以下是几种连接方式:

//方式一:直接使用Driver实现类进行数据库的连接
    @Test
    public void testConnection1() throws SQLException{
        Driver driver = new Driver();

        //jdbc:mysql : 协议
        //localhost:ip地址
        //3306:默认mysql的端口号
        //test:数据库
        String url = "jdbc:mysql://localhost:3306/test";

        //将用户名和密码封装在Properties中
        Properties info = new Properties();
        info.setProperty("user" , "root");
        info.setProperty("password" , "123456");

        Connection con = driver.connect(url , info);

        System.out.println(con);
    }

    //方式二:对方式一的迭代 在方式一的基础上使用反射,更利于java的编程思想 
    @Test
    public void testConnection2() throws Exception{
        //获取Driver对象 使用反射
        Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver)clazz.newInstance();

        //jdbc:mysql : 协议
        //localhost:ip地址
        //3306:默认mysql的端口号
        //test:数据库
        String url = "jdbc:mysql://localhost:3306/test";

        //将用户名和密码封装在Properties中
        Properties info = new Properties();
        info.setProperty("user" , "root");
        info.setProperty("password" , "123456");

        Connection con = driver.connect(url , info);

        System.out.println(con);
    }

    //方式三:使用DriverManager替换Driver
    @Test
    public void testConnection3() throws Exception {
        //获取Driver对象 使用反射
        Class<?> clazz = Class.forName("com.mysql.cj.jdbc.Driver");
        Driver driver = (Driver)clazz.newInstance();

        //提供连接信息
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "123456";

        //注册驱动
        DriverManager.registerDriver(driver);

        //获取连接
        Connection connection = DriverManager.getConnection(url, user, password);

        System.out.println(connection);
    }

    //方式四:可以只是加载驱动,不用显示注册驱动了
    @Test
    public void testConnection4() throws Exception {
        //加载Driver 会自动加载静态代码块 注册驱动
        Class.forName("com.mysql.cj.jdbc.Driver");

        //提供连接信息
        String url = "jdbc:mysql://localhost:3306/test";
        String user = "root";
        String password = "123456";

        //获取连接
        Connection connection = DriverManager.getConnection(url, user, password);

        System.out.println(connection);
    }

    //方式五:将数据库连接需要的四个基本信息 声明在配置文件中 读取配置文件获取连接
    @Test
    public void testConnection5() throws Exception {
        //读取配置文件的基本信息
        InputStream inputStream = ConnectionTest.class.getClassLoader().getResourceAsStream("jdbc.properties");

        Properties properties = new Properties();
        properties.load(inputStream);

        String user = properties.getProperty("user");
        String password = properties.getProperty("password");
        String url = properties.getProperty("url");
        String driverClass = properties.getProperty("driverClass");

        //加载驱动
        Class.forName(driverClass);

        //获取连接
        Connection connection = DriverManager.getConnection(url, user, password);

        System.out.println(connection);
    }

至于方式四我们可以看一下Driver类的源码:
在这里插入图片描述
由此可知Driver类有静态代码,其中代码功能为注册驱动,因此在加载Driver的时候会自动加载静态代码块(即注册驱动)。所以可以去掉方式三中的一些代码。

方式五的配置文件内容如下:
在这里插入图片描述

以上是作者最近学习JDBC的一些记录,主要用于巩固知识,加深印象。其中可能有一些不正确的地方,还请指出。

覆盖着积雪的乞力马扎罗山高19710英尺,据说是非洲境内最高的一座山峰。山的西主峰被马赛人称作“纳加奇——纳加伊”,意思是“上帝的殿堂”。靠近西主峰的地方有一具冻僵风干了的豹子尸体。豹子在那么高的地方寻找什么,没有人做出过解释。                                                                        ——海明威《乞力马扎罗山的雪》

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值