• 浅谈了解JDBC


    前言

    Java数据库连接,是Java语言中用来规范客户端程序如何来访问数据库的应用程序接口,提供了诸如查询和更新数据库中数据的方法。JDBC也是Sun Microsystems的商标。JDBC是面向关系型数据库的。 在J2SE中,提供了一个称之为JDBC-ODBC桥的API。

    ​ --维基百科

    sun公司提供的java连接数据库的规范,包括一些常见的数据库,MySQL Oracle等。

    要想通过IDEA创建项目连接借助JDBC使用mysql数据库等,这里以我使用的MySQL数据库为例,

    要下载好相应的jar包,这在官网中都可以找到。通过IDEA的导包,将其添加到所在的项目列表里,就可以使用JDBC。

    作用

    JDBC就是对于java代码来说,在应用程序和数据库之间的一个中间层 API,也就是中间商;JDBC允许操作者按照所需要的形式去访问获取数据库信息,可以进行查询,有点类似那些数据库可视化软件的部分功能,同时支持更新指令,处理其响应并返回结果。

    JDBC的架构

    分为了三层和两层架构;

    1. 三层架构,中间相较于两层架构,多一个应用服务层,区分层次就是为了符合”高内聚,低耦合“的思想,可以降低层与层之间的依赖,减少依赖性,开发人员可以只用关注某一层。

    2. 双层架构

      这种架构,支持直接连接数据库进行操作,这种架构,效率会高很多,因为直接访问数据库,但是有时维护成本和时间会增加,相对于三层可靠性和安全性会欠缺一些

    下面讲一下一些操作步骤。

    步骤

    可以查阅官方文档查看,比较详细,不过是全英文的,可以翻译来看看。

    1. 注册驱动

      //这样写是由问题的,里面的Driver类有静态代码块会自动注册了很容易造成二次注册,没必要二次注册
      //DriverManager.registerDriver(new com.mysql.jdbc.Driver());
      Class.forName("com.mysql.jdbc.Driver");//里面加的是全路径
      //返回与给定字符串名称的类或接口相关联的类对象。 调用此方法相当于: 
      //Class.forName(className, true, currentLoader) 
      //其中currentLoader表示当前类的定义类加载器。 
      
    2. 建立连接

      //这里我一开始的写法没有加上useSSL和时区,导致IDEA报错,这里写成这样会比较好一点
      DriverManager.getConnection("jdbc:mysql://localhost:3306/myemployees?useSSL=false&serverTimezone=Asia/Shanghai",'user','password');
      //这里使用这种格式之后,我把加载驱动程序的class.forName注释掉了,都是可以使用的,只是会出现警告
      
    3. 创建statement

      //填充sql语句
      PreparedStatement pre = con.prepareStatement("select * from employees where first_name = 'Lex';");
      
      
    4. 执行sql语句,获得resultSet

      //executes sql 
      //这里使用了 ResultSet 的executeQuery()方法,执行查询的sql语句,并返回结果
      ResultSet rs = pre.executeQuery();
      
    5. 遍历得到所需的结果

      //和遍历文件的输出输入流一样
      //可以使用同样的框架
      //@param getString方法中的参数就是columnLabel(下面我所使用的salary字段)使用SQL AS子句指定的列的标签。如果未指定SQL AS子句,则标签为列的名称
         while (rs.next()){
                  System.out.println("输出:"+rs.getString("salary"));//因此返回的是查询salary的内容
              }
      
      
    6. 关闭,释放资源

      //Statement stmt = null;
      //ResultSet rs = null;
      //下面是官方文档中推荐的释放资源的写法
      if (rs != null) {
              try {
                  rs.close();
              } catch (SQLException sqlEx) { } // ignore
      
              rs = null;
          }
      
          if (stmt != null) {
              try {
                  stmt.close();
              } catch (SQLException sqlEx) { } // ignore
      
              stmt = null;
      
    • 完整代码
    package mysql;
    
    import java.sql.*;
    
    /**
     * @Author: yhy
     * @Date: 2020/2/27
     * @Time: 20:53
     */
    public class ConFirst {
        public static void main(String[] args) throws SQLException, ClassNotFoundException {
     //        register
            Class.forName("com.mysql.cj.jdbc.Driver");
        //    DriverManager.registerDriver(new com.mysql.jdbc.Driver());
    
    //        connect message
            Connection con = DriverManager.getConnection("jdbc:mysql://localhost:3306/myemployees?useSSL=false&serverTimezone=Asia/Shanghai","user","password");
    //        sql statement
            PreparedStatement pre = con.prepareStatement("select * from employees where first_name = 'Lex';");
    //        accept the result
            ResultSet rs = pre.executeQuery();
            while (rs.next()){
                System.out.println("输出:"+rs.getString("salary"));
            }
    //        close the resource
            //应该按照官方那样写,我这里偷懒没写详细
            rs.close();
            con.close();
        }
    
    
    }
    
    

    JDBC常见的关键字解释

    • DriverManager: 这个类管理数据库驱动程序的列表。内容是否符合从Java应用程序使用的通信子协议正确的数据库驱动程序的连接请求。识别JDBC在一定子协议的第一个驱动器将被用来建立数据库连接。

    • Driver: 此接口处理与数据库服务器通信。很少直接驱动程序对象.

      //        每个驱动程序类必须实现的接口。
      //        Java SQL框架允许多个数据库驱动程序。
      //        每个驱动程序都应该提供一个实现Driver接口的类。
      //        DriverManager将尝试加载尽可能多的驱动程序,然后对于任何给定的连接请求,它会依次要求每个驱动程序           尝试连接到目标URL。
      //        强烈建议每个Driver类应该是小型且独立的,以便可以加载和查询Driver类,而不需要大量的支持代码。 
      
    • Connection : 此接口与接触数据库的所有方法。连接对象表示通信上下文,即,与数据库中的所有的通信是通过唯一的连接对象。

    • Statement:用于执行静态SQL语句并返回其生成的结果的对象。创建执行SQL语句的连接中间人。

    • SQLException: 这个类处理发生在一个数据库应用程序的任何错误,提供有关数据库访问错误或其他错误的信息的异常,而且每一个都提供了信息,包括了描述错误的字符串

    • ResultSet:表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。ResultSet对象保持一个光标指向其当前的数据行。最初,光标位于第一行之前。 next方法将光标移动到下一行,并且由于在ResultSet对象中没有更多行时返回false,因此可以在while循环中使用循环来遍历结果集。使用之后一般选择close。

  • 相关阅读:
    IDEA激活及使用丶
    内网渗透-windows认证
    应急响应必备技能
    云计算期末考试---
    常见GetShell
    SQL Sever提权
    Socks协议以及代理转发工具分析
    最近两场HVV总结
    ATK&CK红队评估实战靶场 (一)的搭建和模拟攻击过程全过程
    应急响应之勒索病毒
  • 原文地址:https://www.cnblogs.com/yhycoder/p/12381845.html
Copyright © 2020-2023  润新知