• JDBC 数据库操作



    前言

    • 当今应用程序都在使用数据库进行数据的存储与查询;
    • 数据库支持强大的SQL(Structured Query Language结构化查询语言)语句,可进行事务处理
    • 操作数据库中的数据以及检索查询结果,要执行SQL语句;
    • 在Java中实现这些活动的技术称作JDBC。
      在这里插入图片描述

    JDBC驱动程序类型

    • 使用JDBC连接数据库可以通过不同的驱动方式来实现,有4种驱动类型:
      • JDBC-ODBC桥驱动
      • 纯Java驱动
      • 本地API部分Java驱动
      • JDBC网络纯Java驱动
    • 不论采用哪种驱动方式,在程序中对数据库的操作方式基本相同,只是加载不同的驱动程序即可。

    纯Java驱动方式连接数据库

    优点

    • 使用JDBC-ODBC桥方式连接数据库,其性能完全取决于数据源(ODBC)的性能,并且无法脱离Microsoft的平台,这样将带来不便;
    • 大部分DBMS产商都为自己的产品开发了纯Java的驱动程序,我们只需要加载相应的驱动,就可以直接连接到数据库,而无需通过ODBC桥连接;
    • 鉴于DBMS产品太多,这里只针对当今比较流行的MYSQl,SQL Server 和Oracle 进行介绍。

    在这里插入图片描述

    java.sql包

    • java.sql包也是Java内置的包,其中包含了一系列用于与数据库进行通信的类和接口;
    • 如果要使用到这些类和接口的话,则必须显式地声明如下语句:
      • import java.sql.*;
        

    java.sql包中的一些接口

    在这里插入图片描述

    java.sql包中的一些类

    在这里插入图片描述

    JDBC程序访问数据库步骤

    在这里插入图片描述

    步骤详解

    加载驱动程序

    • 使用Class类的forName方法,将驱动程序类加载到JVM(Java虚拟机)中;

    在这里插入图片描述

    • 使用纯Java驱动连接到MySQL 5.0数据库,加载驱动程序应为如下语句:
      Class.forName(“com.mysql.jdbc.Driver”);
    • 使用纯Java驱动连接到MySQL 8.0数据库, Class.forName(“com.mysql.cj.jdbc.Driver”)

    获得连接对象

    成功加载驱动后,进一步获得连接对象;
    先使用java.sql包中的Connection类声明一个对象
    再使用类DriverManager调用它的静态方法getConnection创建这个连接对象
    建立连接时应捕获SQLException异常 :

    try{ Connection con=
    DriverManager.getConnection("jdbc:mysql://服务器名或IP:3306/数据库名","login name“, " password ");
    }  catch(SQLException e){} 
    如:
    Connection con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root",1234"); 
    Connection con = DriverManager.getConnection(“jdbc:mysql://localhost:3306/test", "root", “1234");
    

    创建语句对象

    一旦成功连接到数据库,获得Connection对象后,必须通过Connection对象的createStatement方法来创建语句对象,才可以执行SQL语句;

    在这里插入图片描述
    如:Statement sql = con.createStatement();

    执行SQL语句

    • 使用语句对象来执行SQL语句,有两种情况:

    • 一种是执行SELECT这样的数据查询语句(DQL),这样的语句将从数据库中获得所需的数据,使用Statement对象的executeQuery 方法执行;

      • 1.向数据库发送SQL查询语句
        Statement sql=con.createStatement();
      • 2.使用Statement对象的executeQuery方法成功执行SELECT语句后,将返回一个包含有结果数据的ResultSet对象
        ResultSet rs=sql.executeQuery(“SELECT * FROM employee”);
    • 一种是执行DELETE、UPDATE和INSERT之类的数据库操作语句(DML),这样的语句没有数据结果返回,使用Statement对象的executeUpdate方法执行;

    • sql.executeUpdate(“INSERT INTO goods VALUES (‘A009’,‘手机’, ‘2021-12-20’,3976) “);

    例子

    try {
      Class.forName("com.mysql.jdbc.Driver");
      Connection con;
     con = DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/test", "root",1234");
      Statement sta = con.createStatement();
      ResultSet rs = sta.executeQuery("SELECT * FROM goods");
      System.out.println("查询到数据如下:");
      while (rs.next()) {        //循环将结果集游标往下移动,到达末尾返回false
        //根据字段名称获得各个字段的值
        System.out.print(rs.getString(“number”) + "\t");     //获得字符串
        System.out.print(rs.getString(“name") + "\t");  //获得字符串
    	 System.out.print(rs.getDate(“madeTime") + "\t");   //获得日期型数据
        System.out.print(rs.getDouble (“price”) + “\t”);   //获得数
      }
     con.close();
    } catch (ClassNotFoundException cnfe) { cnfe.printStackTrace(); }
      catch (SQLException sqle) { sqle.printStackTrace(); }
    

    关闭资源

    • 当对数据库的操作结束后,应当将所有已经被打开的资源关闭,否则将会造成资源泄漏;
    • Connection对象有执行关闭的close方法;
    • 函数原型都是:void close() throws SQLException
      如:
      con.close(); //关闭Connection对象
    • 有可能抛出SQLException异常,必须捕捉;

    PreparedStatement对象示例

    String strCon = "jdbc:odbc:myData";
    System.out.println("正在连接数据库...");
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con;
    con = DriverManager.getConnection(strCon,", "");
    System.out.println("成功连接到数据库。");
    
    PreparedStatement ps;
    //使用带参数的SQL语句创建PreparedStatement对象
    ps = con.prepareStatement("UPDATE goods SET price = ? WHERE Name = ?");
    //设置SQL语句中的参数值
    ps.setDouble(1, 5000);
    ps.setString(2, “TV");
    int count = ps.executeUpdate();     //执行命令
    
    System.out.println("成功更新了" + count + "行数据。");      
    con.close(); //关闭资源
    
  • 相关阅读:
    Edexcel A-Level化学真题讲解(5)
    重学JavaSE 第7章 : 面向对象(中) 继承性、多态性、方法的重写、super、子类对象实例化过程、Object类、包装类
    【C++】多态
    【ABAP】如何理解SAP中的CLIENT (客户端)
    ElasticSearch(九)【SpringBoot整合】
    SATA系列专题之五:Link Power Management解析
    TensorFlow入门(十七、神经元的拟合原理)
    分布式配置nacos搭建踩坑指南(下)
    SpringMVC controller方法获取请求数据与前端传参类型匹配
    mysql优化之show profile的使用及分析
  • 原文地址:https://blog.csdn.net/weixin_51422230/article/details/126959627