Java的JDBC编程

1. 数据库编程的必备条件

        主要大体上来说有三个:

        1、编程语言,如Java,C、C++、Python等

        2、数据库,如Oracle,MySQL,SQL Server等

        3、数据库驱动包:不同的数据库,对应不同的编程语言提供了不同的数据库驱动包,如:MySQL提 供了Java的驱动包mysql-connector-java,需要基于Java操作MySQL即需要该驱动包。同样的, 要基于Java操作Oracle数据库则需要Oracle的数据库驱动包ojdbc。

        小小的拓展:

        数据库的类别:

  1. mysql
  2. oracle
  3. sql sever
  4. sqlite

------------------>代码操作数据库的前提,是数据库要提供api,咱们调用api才能完成操作。

        Api(application programing interface)应用程序编程接口。具体的体现形式就是一些已经实现好了的类和方法。如果某个东西,提供的api特别多,特别丰富,就会把这个东西称为sdk(软件开发工具);Jdk就是java 的开发工具包。

        以上四种数据库,提供的api不一致(提供的函数,函数名,功能,参数,返回值)

所以,java就将以上的多种数据库联合到一起,即来提供一种api标准,各个数据库将已经搞好的api重新包装一下,搞到一起。

        这时,我们就只需要按照一套api来搞就可以。故此就不关心各种数据库api的差异,只用学java这一套就行了。

        由此,数据库原有的api不变,在这个基础上,加个封装层,适配到jdbc这一套接口上。后序学到的操作数据库的框架,本质上就是jdbc的封装。

2. Java的数据库编程

2.1 引入JDBC 

        JDBC,即Java Database Connectivity,java数据库连接。是一种用于执行SQL语句的Java API,它是Java中的数据库连接规范。这个API由 java.sql.* ,javax.sql.* 包中的一些类和接口组成,它为Java开发人员操作数据库提供了一个标准的API,可以为多种关系数据库提供统一访问;

        Jdbc编程,通过java代码来操作数据库。一般来说只有在调试,测试,验证环境才通过手动操作数据库。本质上,使用编程语言来操作数据库,其实是在操作sql。

2.2 JDBC工作原理

        JDBC 为多种关系数据库提供了统一访问方式,作为特定厂商数据库访问API的一种高级抽象,它主要包含一些通用的接口类

        JDBC访问数据库层次结构如下图所示:

Java的JDBC编程_第1张图片

        JDBC优势:

        1、Java语言访问数据库操作完全面向抽象接口编程

        2、开发数据库应用不用限定在特定数据库厂商的API

        3、程序的可移植性大大增强

3. JDBC的使用

3.1 准备工作

        需要引入mysql的jdbc的驱动包。(该驱动包是第三方库,不是jdk这里原生就有的,需要通过其他途径下载下来并引入到项目中)驱动包如下图所示:

           Java的JDBC编程_第2张图片

        第一个是更高版本的驱动包,第二个是低版本的驱动包,选择相对应自己mysql版本来下载相应的驱动包;

        我们下载的是一个.Jar的文件,Jar本质上是一个类似于rar这样的压缩包,里面主要是.class文件;

3.2 把jar包导入到项目中

        随便在项目中创建一个目录,把jar包拷贝进去。(Lib是库的意思),具体如下图所示:

        Java的JDBC编程_第3张图片

        右键这个目录,add as library-->添加为库:

       Java的JDBC编程_第4张图片

        此时,如此则导入成功;

3.3 写jdbc的代码

3.3.1 步骤一

        创建数据源,数据源描述了你要操作的数据库在哪里

        数据库是服务器,服务器可能在你这个主机上,也可能在其他主机上,我们首先要明确这个服务器的位置。

        数据库主要是通过Ip地址+端口号+数据库名来定位。

        IP地址:是用来描述一个主机在网络上的位置,是一串数字组成的。

        127.0.0.1:这是一个特殊的ip,叫做“环回ip”(lookback)--表示主机。

       端口号:一个主机上有很多服务器程序,我们使用端口号来区分不同的服务程序。3306:(mysql服务器默认的端口号)

 实际应用中使用DataSource对象,获取方法有以下两种:

方法一:

DataSource ds = new MysqlDataSource();
((MysqlDataSource) ds).setUrl("jdbc:mysql://127.0.0.1:3306/dream?characterEncoding=utf-8&&useSSL=false");

图解分析:

Java的JDBC编程_第5张图片

Java的JDBC编程_第6张图片

方法二:

MysqlDataSource dataSource = new MysqlDataSource();
dataSource.setUrl("jdbc:mysql://127.0.0.1:3306/dream?characterEncoding=utf-8&&useSSL=false");

        两种用法没有什么区别;

        url参数解释:

Java的JDBC编程_第7张图片

 3.3.2 步骤二

        数据库连接Connection:和数据库服务器,建立连接

        利用前面所创建的数据源对象,调用setUser方法与setPassword方法

  • setUser方法里面传的是用户名,一般默认为root

  • setPassword方法里面传的是你的数据密码

        至此代码如下:

  DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java110?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("111111");

        //2、和数据库服务器,建立连接
        Connection connection= dataSource.getConnection();//connection是jdbc的

         这个代码就会和数据库服务器之间建立连接(抽象的连接:可以理解成通信双方各自保存对方的信息

3.3.3 步骤三

        构造一个sql

 //3、构造一个sql,
        String sql = "delete from student1 where id = ? ;";

        //需要把string sql 转化成 语句对象
        PreparedStatement statement = connection.prepareStatement(sql);
        statement.setInt(1,id);
//        statement.setString(2,name);

Java的JDBC编程_第8张图片

        具体语法解析如下:

        1. 通过控台,写sql,就是把原始的sql发给服务器,服务器负责解析sql

        2.1 使用statement(没有预处理),只是服务器先解析,在执行

        2.2 使用preparedstatement,就不一样,可以先给客户端这边,提前把sql解析好,把解析后的结果发给服务器,服务器的解析开销就大大降低了,直接解析即可。

        下面是两个方法的使用:

        上面的那个只负责查询,返回值是resultset(结果集,select语句得到的临时表)

        下面那个可以进行增删改查(创建表、删除表),只需要返回一个数据,这个整数表示这个操作影响了几行。

此处的名次解释:

  1. Datasource数据源:描述了数据库服务器在哪里
  2. Connection连接:需要先建立连接,才能进行通信。基于Datasource构造出来的,知道数据库服务器在哪里,才能建立起链接。
  3. PrepareStatement语句:基于连接生成的,当前语句对象是要发给服务器的

3.3.4 步骤四

        并把sql发给服务器进行执行

//4、并把sql发给服务器进行执行
        int n = statement.executeUpdate();
        System.out.println("n ="+n);

        此时,代码就会构造一个网络请求,发送给mysql服务器(咱们的代码就是客户端的角色,相当于cmd),并且会等待服务器的相应,并把得到的相应显示在控制台上。

3.3.5 步骤五

        最后一步,释放必要的资源

  //5最后一步,释放必要的资源
        statement.close();
        connection.close();

        释放的顺序和创建的顺序是相反的。

3.3.6 结果展示

        运行idea,执行代码指令:

Java的JDBC编程_第9张图片

        在mysql中查看:

起初:

Java的JDBC编程_第10张图片

之后:

Java的JDBC编程_第11张图片

         关于select语句的代码(过程略):

import com.mysql.jdbc.jdbc2.optional.MysqlDataSource;

import javax.sql.DataSource;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;

public class TestJDBCSelest {
    public static void main(String[] args) throws SQLException {
        //1、创建数据源,数据源描述了你要操作的数据库在哪里
        DataSource dataSource = new MysqlDataSource();
        ((MysqlDataSource) dataSource).setURL("jdbc:mysql://127.0.0.1:3306/java110?characterEncoding=utf8&useSSL=false");
        ((MysqlDataSource) dataSource).setUser("root");
        ((MysqlDataSource) dataSource).setPassword("111111");

        //2、和数据库服务器,建立连接
        Connection connection= dataSource.getConnection();//connection是jdbc的

        //3、构造一个sql,
        String sql = "select * from student1";
        //需要把string sql 转化成 语句对象
        PreparedStatement statement = connection.prepareStatement(sql);

        //4\并把sql发给服务器进行执行
        ResultSet resultSet = statement.executeQuery();
        while (resultSet.next()){
            //这个代码,就是获取id这一列的数值,期望得到一个int
            int id = resultSet.getInt("id");
            String name = resultSet.getString("name");
            System.out.println("id:" + id);
            System.out.println("name:" + name);
        }

        //5最后一步,释放必要的资源
        resultSet.close();
        statement.close();
        connection.close();
    }
}

        代码运行:

Java的JDBC编程_第12张图片

名词解释:

        耦合:两个东西之间的关联联系,关系越密集,耦合就越高。

        高耦合:好的夫妻,一方有难,对另外以方会有很大的影响。-->改一处的代码,结果其他很多东西出bug

        低耦合:一对陌生人,一方有难,但是对另外一方微乎其微。

        内聚:把有关系的代码,放在一起,不要放在各个地方。

        低内聚:某个功能的代码,会散落在各个地方,想要理解,想要修改,就要满地图去找

        高内聚:把有关联得代码,放到一起

ps:本次的内容就到这里了,如果大家感兴趣的话就请一键三连哦!!!

至此,mysql初阶结束;

你可能感兴趣的:(mysql,java,开发语言,mysql,数据库)