2022.4.23 JDBC

JDBC

1.1 JDBC概念

JDBC 就是使用Java语言操作关系型数据库的一套API,全称:( Java DataBase Connectivity ) Java 数据库连接

我们开发的同一套Java代码是无法操作不同的关系型数据库,因为每一个关系型数据库的底层实现细节都不一样。如果这样,问题就很大了,在公司中可以在开发阶段使用的是MySQL数据库,而上线时公司最终选用oracle数据库,我们就需要对代码进行大批量修改,这显然并不是我们想看到的。我们要做到的是同一套Java代码操作不同的关系型数据库,而此时sun公司就指定了一套标准接口(JDBC),JDBC中定义了所有操作关系型数据库的规则。众所周知接口是无法直接使用的,我们需要使用接口的实现类,而这套实现类(称之为:驱动)就由各自的数据库厂商给出。

 

mysql驱动就是 mysql对于JDBC的实现类,就是驱动的jar包,jar包里就是各种实现类

1.2 JDBC本质

  • 官方(sun公司)定义的一套操作所有关系型数据库的规则,即接口

  • 各个数据库厂商去实现这套接口,提供数据库驱动jar包

  • 我们可以使用这套接口(JDBC)编程,真正执行的代码是驱动jar包中的实现类

1.3 JDBC好处

  • 各数据库厂商使用相同的接口,Java代码不需要针对不同数据库分别开发

  • 可随时替换底层数据库,访问数据库的Java代码基本不变

以后编写操作数据库的代码只需要面向JDBC(接口),操作哪个关系型数据库就需要导入该数据库的驱动包,如需要操作MySQL数据库,就需要再项目中导入MySQL数据库的驱动包。如下图就是MySQL驱动包

JDBC API

第一个jdbc程序

先来看看通过Java操作数据库的流程

第一步:编写Java代码

第二步:Java代码将SQL发送到MySQL服务端

第三步:MySQL服务端接收到SQL语句并执行该SQL语句

第四步:将SQL语句执行的结果返回给Java代码

 

创建测试数据库

复制代码
 1  SELECT VERSION()  -- 查看数据库版本
 2  3  CREATE DATABASE jdbcStudy CHARACTER SET utf8 COLLATE utf8_general_ci;
 4  5  USE jdbcStudy;
 6  7  CREATE TABLE users(
 8    id INT PRIMARY KEY,
 9    `NAME` VARCHAR(40),
10    `PASSWORD` VARCHAR(40),
11    email VARCHAR(60),
12    birthday DATE
13   );
14  INSERT 
15  INTO users(id,NAME,PASSWORD,email,birthday)
16  VALUES(1,'zhansan','123456','zs@sina.com','1980-12-04'),
17        (2,'lisi','123456','1isi@sina.com','1981-12-04'),
18        (3,'wangwu','123456','wangwu@sina.com',' 1979-12-04');
复制代码
 
 1、创建一个普通项目
 2、导入数据库驱动

1、创建一个普通项目 2、导入数据库驱动

  • 创建lib目录

  • 将jar包粘贴到目录下

  • 将lib目录添加到库,这时jar包才可以展开

3、编写测试代码

  • 加载驱动(打开SQLyog)

  • 用户信息和urL

  • 连接成功,数据库对象 这就是数据库对象

  • 执行SQL的对象

  • SQL对象去执行SQL

  • 释放连接

对应可视化工具SQLyog

复制代码
 1  package com.xing.lesson01;
 2  3  import java.sql.*;
 4  5  //我的第一个JDBC
 6  public class JdbcFirstDemo01 {
 7      public static void main(String[] args) throws SQLException {
 8          //1.加载驱动   固定写法
 9          Class.forName("com.mysql.jdbc.Driver");//需抛出异常
10 11          //2.用户信息和urL(主机地址)              数据库名 用问号连接参数 使用Unicode编码  字符集编码  使用安全连接
12          String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
13          String username = "root";
14          String password = "123456";
15 16          //3.连接 : DriverManager类  驱动管理    getConnection()获得连接    Connection代表数据库
17          Connection connection = DriverManager.getConnection(url, username, password);//需抛出异常SQLException
18 19          //4.执行SQL的对象:   Statement类 执行sql对象    createStatement()创建对象
20          Statement statement = connection.createStatement();
21 22          //5.SQL对象去执行SQL语句
23          String sql = "SELECT * FROM users";
24 25          //返回结果集,结果集中封装了我们全部的查询出来的结果
26          ResultSet resultSet = statement.executeQuery(sql);//查询
27          //statement.executeUpdate();//更新
28 29          while(resultSet.next()){//如果结果集中还存在下一个元素
30              //可以通过类型去取数据 getString() ,不知道类型用getObject()
31              //                                                      属性列
32              System.out.println("id"+resultSet.getObject("id"));
33              System.out.println("NAME"+resultSet.getObject("NAME"));
34              System.out.println("PASSWORD"+resultSet.getObject("PASSWORD"));
35              System.out.println("email"+resultSet.getObject("email"));
36              System.out.println("birth"+resultSet.getObject("birthday"));
37 38          }
39 40          //6、释放连接
41 42          resultSet.close();
43          statement.close();
44          connection.close();
45 46      }
47 48  }
复制代码

 

步骤总结:

1、加载驱动(告诉代码用哪个驱动jar包)

1   //1.加载驱动   固定写法
2  Class.forName("com.mysql.jdbc.Driver");//将一个类(mysql的驱动类)加载进内存需抛出异常

2、获取连接(Java代码需要发送SQL给MySQL服务端,就需要先建立连接)

1 Connection conn = DriverManager.getConnection(url, username, password);

3、获得执行sql的对象Statement,执行SQL语句需要SQL执行对象,而这个执行对象就是Statement对象

1 Statement stmt = conn.createStatement();

4、定义SQL语句

1 String sql = "SELECT * FROM users";

5、获得返回的结果集

复制代码
 1         //返回结果集,结果集中封装了我们全部的查询出来的结果
 2         ResultSet resultSet = statement.executeQuery(sql);//查询
 3         //statement.executeUpdate();//更新
 4 
 5         while(resultSet.next()){//判断下一行是否有数据
 6             //对当前行每列数据进行获取,根据列的编号
 7             //可以通过类型去取数据 getString() ,不知道类型用getObject()
 8             System.out.println("id"+resultSet.getObject("id"));
 9             System.out.println("NAME"+resultSet.getObject("NAME"));
10             System.out.println("PASSWORD"+resultSet.getObject("PASSWORD"));
11             System.out.println("email"+resultSet.getObject("email"));
12             System.out.println("birth"+resultSet.getObject("birthday"));
13 
14         }
复制代码

6、释放连接

1 //6、释放连接
2 
3 resultSet.close();
4 statement.close();
5 connection.close();

DriverManager

复制代码
 1  //1.加载驱动   固定写法
 2  Class.forName("com.mysql.jdbc.Driver");//需抛出异常ClassNotFoundException
 3  //DriverManager.registerDriver(new Driver());标准写法,但是多余
 4  5                             //需抛出异常SQLException
 6  Connection connection = DriverManager.getConnection(url, username, password);
 7  //connection代表数据库
 8  //可以实现数据库级别的操作  数据库设置自动提交  事务提交     事务回滚
 9  connection.rollback();//回滚
10  connection.commit();//提交
11  connection.setAutoCommit();//自动提交
复制代码

URL

1  //                  http://baidu.com/数据库名?参数1&参数2&参数3
2  //                   协议//主机地址:端口号/数据库名?参数1&参数2&参数3
3  //mysql默认端口3306
4  String url = "jdbc:mysql://localhost:3306/jdbcstudy?useUnicode=true&characterEncoding=utf8&useSSL=true";
5 6  // ora1ce默认端口1521
7  //jdbc:oracle:thin: @localhost:1521:sid

Statement 执行SQL的对象 PreparedStatement执行SQL的对象

1  Statement statement = connection.createStatement();
2 3  String sql = "SELECT * FROM users";//编写sql语句
4 5  statement.executeQuery(sql);//查询操作返回结果集
6  statement.execute(); //执行任何SQL
7  statement.executeUpdate();//更新、插入、删除。都使用这个,返回一个受影响的行数

ResultSet 查询结果集,封装了所有的查询结果

获得数据

1  ResultSet resultSet = statement.executeQuery(sql);//查询
2 3  resultSet.getObject("列名")
4 5  //知道类型用指定类型的方法例如知道String类型用 getString() ,不知道类型用getObject()

遍历

1  resultSet.beforeFirst();//移动到最前面
2  resultSet.afterLast();//移动到最后面
3  resultSet.next();//移动到下一个数据
4  resultSet.previous();//移动到前一行
5  resultSet.absolute(row);//移动到指定行

释放连接

1  resultSet.close();
2  statement.close();
3  connection.close();

 

 

posted @   暴躁C语言  阅读(20)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端
点击右上角即可分享
微信分享提示