加入收藏 | 设为首页 | 会员中心 | 我要投稿 开发网_新乡站长网 (https://www.0373zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长学院 > MySql教程 > 正文

什么是JDBC?这篇文章告诉你

发布时间:2022-11-23 11:17:47 所属栏目:MySql教程 来源:
导读:  JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。它是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够通过执行SQL语句来完成对数据库中数据的查询、更新和
  JDBC的全称是Java数据库连接(Java Database connect),它是一套用于执行SQL语句的Java API。它是Java和数据库之间的一个桥梁,是一个规范而不是一个实现,能够通过执行SQL语句来完成对数据库中数据的查询、更新和删除等操作。
 
  从上图可以看出,应用程序使用JDBC访问特定的数据库时,需要与不同的数据库驱动进行连接。由于不同数据库厂商提供的数据库驱动不同,因此,为了使应用程序与数据库真正建立连接,JDBC不仅需要提供访问数据库的API,还需要封装与各种数据库服务器通信的细节,不同厂商的数据库都有相应的实现。
 
  下面通过一张图来描述JDBC的具体实现细节,
 
  从上图中可以看出,JDBC的实现包括三部分。
 
  (1)JDBC驱动管理器:负责注册特定的JDBC驱动器,主要通过java.sql.DriverManager类实现;
 
  (2)JDBC驱动器API:由Sun公司负责制定,其中最主要的接口是java.sql.Driver接口;
 
  (3)JDBC驱动器:它是一种数据库驱动,由数据库厂商创建,也称为JDBC驱动程序,负责与特定的数据库连接,以及处理通信细节。
 
  JDBC编程步骤
 
  各种不同厂商的数据库都有相应的实现,本文中的代码都是针对MySQL数据库实现的。
 
  1、注册驱动
 
  在编写代码前,你需要安装MySQL第三方类库,mysql-connector-java-8.0.29-bin.jar包可以在网上下载,或者在MySQL的安装目录下找到。
 
      try {
          Driver driver = new com.mysql.cj.jdbc.Driver();
          DriverManager.registerDriver(driver);
      } catch (SQLException e) {
          throw new RuntimeException(e);
      }
  以下是com.mysql.cj.jdbc.Driver类的源代码
 
  public class Driver extends NonRegisteringDriver implements java.sql.Driver {
      public Driver() throws SQLException {
      }
      static {
          try {
              DriverManager.registerDriver(new Driver());
          } catch (SQLException var1) {
              throw new RuntimeException("Can't register driver!");
          }
      }
  }
  加载驱动程序也可以通过Class.forName方法,该方法将这个类加载到JVM中,加载的时候,就会执行其中的静态初始化块,完成驱动的初始化的相关工作。
 
      try {
          Class.forName("com.mysql.cj.jdbc.Driver");
      } catch (ClassNotFoundException e) {
          throw new RuntimeException(e);
      }
  2、建立连接
 
      String url = "jdbc:mysql://localhost:3306/jdbc"; // 数据库URL
      String user = "root"; // 数据库用户名
      String password = "123456"; // 数据库密码
      Connection conn = null;
      try {
          conn= = DriverManager.getConnection(url, user, password);
      } catch (SQLException e) {
          throw new RuntimeException(e);
      }
  3、获取数据库操作对象(预编译对象)
 
  获取数据库操作对象,实现数据库插入操作
 
  public class JDBC {
      public static void main(String[] args) {
          String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
          String user = "root";
          String password = "123456";
          Connection conn = null;
          Statement stmt = null;
          try {
              Class.forName("com.mysql.cj.jdbc.Driver");
              conn = DriverManager.getConnection(url, user, password);
              stmt = conn.createStatement();
              String sql= "insert into user(id, name, gender, age) values(2, '张三', '男', 18)";
              
              stmt.executeUpdate(sql);
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  }
  获取数据库操作对象,实现数据库更新操作
 
  public class JDBC {
      public static void main(String[] args) {
          String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
          String user = "root";
          String password = "123456";
          Connection conn = null;
          Statement stmt = null;
          try {
              Class.forName("com.mysql.cj.jdbc.Driver");
              conn = DriverManager.getConnection(url, user, password);
              stmt = conn.createStatement();
              String sql = "update user set name = '张三' where age = 20"; // 修改SQL语句
              
              stmt.executeUpdate(sql);
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  }
  获取数据库操作对象,并实现数据库删除操作
 
  public class JDBC {
      public static void main(String[] args) {
          String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
          String user = "root";
          String password = "123456";
          Connection conn = null;
          Statement stmt = null;
          try {
              Class.forName("com.mysql.cj.jdbc.Driver");
              conn = DriverManager.getConnection(url, user, password);
              stmt = conn.createStatement();
              String sql = "delete from user where name = '张三'"; // 删除SQL语句
              
              stmt.executeUpdate(sql);
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  }
  获取数据库预编译对象,实现数据库插入操作
 
  public class JDBC {
      public static void main(String[] args) {
          String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
          String user = "root";
          String password = "123456";
          Connection conn = null;
          PreparedStatement pre = null;
          try {
              Class.forName("com.mysql.cj.jdbc.Driver");
              conn = DriverManager.getConnection(url, user, password);
              String sql = "insert into user(id, name, gender, age) values (?, ?, ?, ?)";
              pre = conn.prepareStatement(sql);
              pre.setInt(1,1);
              pre.setString(2,"张三");
              pre.setString(3,"男");
              pre.setInt(4,18);
              pre.executeUpdate();
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  }
  4、处理查询结果集
 
  获取数据库操作对象,实现数据库查询操作,并打印结果集
 
  public class JDBC {
      public static void main(String[] args) {
          String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
          String user = "root";
          String password = "123456";
          Connection conn = null;
          Statement stmt = null;
          ResultSet rs = null;
          try {
              Class.forName("com.mysql.cj.jdbc.Driver");
              conn = DriverManager.getConnection(url, user, password);
              stmt = conn.createStatement();
              String select = "select * from user where name = '张三'";
              rs = stmt.executeQuery(select);
              while (rs.next()) {
                  System.out.println(rs.getString("id") + "," + rs.getString("name")
                  + "," + rs.getString("gender") + "," + rs.getString("age"));
              }
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  }
  获取数据库预编译对象,实现数据库查询操作,并打印结果集
 
  public class JDBC {
      public static void main(String[] args) {
          String url = "jdbc:mysql://localhost:3306/jdbc"; //定义数据库的
          String user = "root";
          String password = "123456";
          Connection conn = null;
          PreparedStatement pre = null;
          ResultSet rs = null;
          try {
              Class.forName("com.mysql.cj.jdbc.Driver");
              conn = DriverManager.getConnection(url, user, password);
              String sql = "select * from user where name = ?";
              pre = conn.prepareStatement(sql);
              pre.setString(1,"藏三");
              rs = pre.executeQuery();
              while (rs.next()) {
                  System.out.println(rs.getString("id") + "," + rs.getString("name")
                  + "," + rs.getString("gender") + "," + rs.getString("age"));
              }
          } catch (Exception e) {
              throw new RuntimeException(e);
          }
      }
  }
  5、释放资源
 
      try {
          if (rs != null) {
              rs.close();
          }
      } catch (SQLException e) {
          e.printStackTrace();
      }
      try {
          if (statement != null) {
              statement.close();
          }
      } catch (SQLException e) {
          e.printStackTrace();
      }
      try {
          if (conn != null) {
              conn.close();
          }
      } catch (SQLException e) {
          e.printStackTrace();
      }
  Statement和PreparedStatement的异同及优缺点
 
  相同点:两者都是用来执SQL语句的
 
  不同点:PreparedStatement需要根据SQL语句来创建,它能够通过设置参数,指定相应的值,不是像Statement那样使用字符串拼接的方式。
 
  PreparedStatement的优点
 
  1、其使用参数设置,可读性好数据库更新操作,不易记错。在statement中使用字符串拼接,可读性和维护性比较差。
 
  2、其具有预编译机制,性能比statement更快。
 
  3、其能够有效防止SQL注入攻击。
 
  execute和executeUpdate的区别
 
  相同点:二者都能够执行增加、删除、修改等操作。
 
  不同点:1、execute可以执行查询语句,然后通过getResult把结果取出来。executeUpdate不能执行查询语句;2、execute返回Boolean类型,true表示执行的是查询语句,false表示执行的insert、delete、update等。executeUpdate的返回值是int,表示有多少条数据受到了影响。
 
  关于JDBC基础介绍就到这里啦,欢迎大家在评论区讨论。
 

(编辑:开发网_新乡站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!