Java的数据库编程-----JDBC

2024-06-04 9989阅读

目录

一.JDBC概念&使用条件:

二.mysql-connector驱动包的下载与导入:

三.JDBC编程:

使用JDBC编程的主要五个步骤:

完整流程1(更新update):

完整流程2(查询query): 


一.JDBC概念&使用条件:

  • JDBC基本概念:

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

    •  JDBC使用条件:

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

      2).数据库,如Oracle,MySQL,SQL Server等(本文主要演示MySQL数据库)

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

      • mysql-connector驱动包:

        由于每个数据库,本身已经有一套API了,比如MySQL,本身的API,就是C语言的API,这时就需要我们把原生的C的API转换成为兼容JDBC的Java的API。MySQL官方提供了一个mysql-connector-->这个驱动包就可以帮助我们完成上述操作.mysql-connector不是mysql自带的,也不是java自带的,需要通过第三方途径,把这个驱动包下载下来并导入到自己的项目中(第三方库),主要由三个途径进行下载:

        1. 去Oracle官网进行下载
        2. 去github
        3. 去maven中央仓库(这种方法最为简便,下面例子以这个为主)

        maven中央仓库网址:Maven Repository: Search/Browse/Explore (mvnrepository.com)

        JDBC优势:

        • Java语言访问数据库操作完全面向抽象接口编程
        • 开发数据库应用不用限定在特定数据库厂商的API
        • 程序的可移植性大大增强 

          二.mysql-connector驱动包的下载与导入:

          • 进入上述网址后,直接搜索mysql就行了,你会看到一下两个主要版本:

            Java的数据库编程-----JDBC 第1张

            • 进入后选择适合自己的版本进行下载:

              Java的数据库编程-----JDBC 第2张

              •  接下来我们在已经创建号的项目中,选中项目,右击鼠标新建一个目录,名字随便取,不要包含中文/特殊字符~

                Java的数据库编程-----JDBC 第3张

                • 复制我们刚才下载好的.jar文件,将其粘贴到刚才创建的lib目录中 :

                  Java的数据库编程-----JDBC 第4张

                  • 右击刚才的lib目录,add as library(意在告诉IDEA,这个lib目录是一个"库"目录): 

                    Java的数据库编程-----JDBC 第5张

                    • 直接点🆗就行了: 

                      Java的数据库编程-----JDBC 第6张

                      • 此时你会看到lib目录下多了以下内容,就说明驱动包导入成功了:

                        Java的数据库编程-----JDBC 第7张 

                         完成上述操作后,我们就可以进行JDBC编程了

                        三.JDBC编程:

                        使用JDBC编程的主要五个步骤:

                        • 1. 创建数据源对象:
                          DataSource dataSource = new MysqlDataSource();
                                  ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");
                                  ((MysqlDataSource) dataSource).setUser("root");//用户名
                                  ((MysqlDataSource) dataSource).setPassword("2222");//密码
                          

                           url参数说明:

                          Java的数据库编程-----JDBC 第8张

                          • 2. 和数据库服务器建立网络连接.:
                            Connection connection = dataSource.getConnection();
                            •  3. 构造 SQL 语句:
                               String sql = "delete from student where id = ?";
                                      PreparedStatement statement = connection.prepareStatement(sql);
                                      statement.setInt(1, id);

                              Java的数据库编程-----JDBC 第9张

                              • 4. 把 SQL 发送到服务器上进行执行: 
                                 int n = statement.executeUpdate();
                                        System.out.println(n);//返回值就表示, 这个 sql , 影响到 几行
                                •  5. 释放上述的资源:
                                   statement.close();
                                   connection.close();

                                  Statement对象 :

                                  Statement对象主要是将SQL语句发送到数据库中。JDBC API中主要提供了三种Statement对象:

                                  Java的数据库编程-----JDBC 第10张 主要两种执行SQL的方法:

                                  •  executeQuery() 方法执行后返回单个结果集的,通常用于select语句
                                  • executeUpdate()方法返回值是一个整数,指示受影响的行数,通常用于update、insert、delete 语句

                                    ResultSet对象:

                                    • ResultSet对象它被称为结果集,它代表符合SQL语句条件的所有行,并且它通过一套getXXX方法提供 了对这些行中数据的访问。
                                    • ResultSet里的数据一行一行排列,每行有多个字段,并且有一个记录指针,指针所指的数据行叫做当 前数据行,我们只能来操作当前的数据行。我们如果想要取得某一条记录,就要使用ResultSet的next() 方法 ,如果我们想要得到ResultSet里的所有记录,就应该使用while循环。

                                      完整流程1(更新update):

                                      import javax.sql.DataSource;
                                      import java.sql.Connection;
                                      import java.sql.PreparedStatement;
                                      import java.sql.SQLException;
                                      import java.util.Scanner;
                                      public class TestJDBC1 {
                                          public static void main(String[] args) throws SQLException {
                                              // 0. 让用户输入 id 和 name
                                              Scanner scanner = new Scanner(System.in);
                                              System.out.println("请输入id: ");
                                              int id = scanner.nextInt();
                                      //        System.out.println("请输入name: ");
                                      //        String name = scanner.next();
                                              // 1. 创建数据源对象
                                              DataSource dataSource = new MysqlDataSource();
                                              ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");
                                              ((MysqlDataSource) dataSource).setUser("root");
                                              ((MysqlDataSource) dataSource).setPassword("2222");
                                              // 2. 和数据库服务器建立网络连接.
                                              Connection connection = dataSource.getConnection();
                                              // System.out.println(connection);
                                              // 3. 构造 SQL 语句
                                              //    PreparedStatement 基于这个类, 构造 SQL
                                              // String sql = "insert into student values(" + id + ", '" + name + "')";
                                              // String sql = "insert into student values (?, ?)";
                                              String sql = "delete from student where id = ?";
                                              PreparedStatement statement = connection.prepareStatement(sql);
                                              statement.setInt(1, id);
                                              // statement.setString(2, name);
                                              // 4. 把 SQL 发送到服务器上进行执行
                                              //    返回值就表示, 这个 sql , 影响到 几行
                                              int n = statement.executeUpdate();
                                              System.out.println(n);
                                              // 5. 释放上述的资源
                                              statement.close();
                                              connection.close();
                                          }
                                      }

                                      注意:Java的数据库编程-----JDBC 第11张 

                                      完整流程2(查询query): 

                                      import javax.sql.DataSource;
                                      import java.sql.Connection;
                                      import java.sql.PreparedStatement;
                                      import java.sql.ResultSet;
                                      import java.sql.SQLException;
                                      public class TestJDBC2 {
                                          public static void main(String[] args) throws SQLException {
                                              // 1. 创建数据源
                                              DataSource dataSource = new MysqlDataSource();
                                              ((MysqlDataSource) dataSource).setUrl("jdbc:mysql://127.0.0.1:3306/itcast?characterEncoding=utf8&useSSL=false");
                                              ((MysqlDataSource) dataSource).setUser("root");
                                              ((MysqlDataSource) dataSource).setPassword("2222");
                                              // 2. 建立连接
                                              Connection connection = dataSource.getConnection();
                                              // 3. 构建 sql
                                              String sql = "select * from student";
                                              PreparedStatement statement = connection.prepareStatement(sql);
                                              // 4. 执行 sql, 这一步和前面不一样
                                              ResultSet resultSet = statement.executeQuery();
                                              // 5. 遍历结果集合
                                              while (resultSet.next()) {
                                                  // 循环里针对一行进行处理,打印列表和mysql中查询的结果一致
                                                  System.out.println(resultSet.getInt("id"));
                                                  System.out.println(resultSet.getString("name"));
                                              }
                                              // 6. 关闭对应的资源
                                              resultSet.close();
                                              statement.close();
                                              connection.close();
                                          }
                                      }

                                       结语: 写博客不仅仅是为了分享学习经历,同时这也有利于我巩固知识点,总结该知识点,由于作者水平有限,对文章有任何问题的还请指出,接受大家的批评,让我改进。同时也希望读者们不吝啬你们的点赞+收藏+关注,你们的鼓励是我创作的最大动力!

                                      Java的数据库编程-----JDBC 第12张


    免责声明:我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自自研大数据AI进行生成,内容摘自(百度百科,百度知道,头条百科,中国民法典,刑法,牛津词典,新华词典,汉语词典,国家院校,科普平台)等数据,内容仅供学习参考,不准确地方联系删除处理! 图片声明:本站部分配图来自人工智能系统AI生成,觅知网授权图片,PxHere摄影无版权图库和百度,360,搜狗等多加搜索引擎自动关键词搜索配图,如有侵权的图片,请第一时间联系我们,邮箱:ciyunidc@ciyunshuju.com。本站只作为美观性配图使用,无任何非法侵犯第三方意图,一切解释权归图片著作权方,本站不承担任何责任。如有恶意碰瓷者,必当奉陪到底严惩不贷!

    目录[+]