java web开发--JDBC

举报
Xxy_1008 发表于 2024/10/30 09:47:26 2024/10/30
【摘要】 定义与概念JDBC(Java Database Connectivity)是 Java 编程语言中用于连接数据库并执行 SQL 语句的一套 API(应用程序接口)。它提供了一种标准的方式,使得 Java 程序能够与各种不同的数据库(如 MySQL、Oracle、SQL Server 等)进行交互,而无需关心具体数据库的细节。这就好比是一个通用的语言翻译器,让 Java 能够和不同数据库这个 ...
  1. 定义与概念
    • JDBC(Java Database Connectivity)是 Java 编程语言中用于连接数据库并执行 SQL 语句的一套 API(应用程序接口)。它提供了一种标准的方式,使得 Java 程序能够与各种不同的数据库(如 MySQL、Oracle、SQL Server 等)进行交互,而无需关心具体数据库的细节。这就好比是一个通用的语言翻译器,让 Java 能够和不同数据库这个 “语种” 进行沟通。
  2. 核心组件与类
    • DriverManager(驱动管理器)
      • 这是 JDBC 的核心管理类。它负责加载数据库驱动程序,并创建数据库连接。例如,在连接 MySQL 数据库时,需要先加载 MySQL 的驱动。代码如下:
       try {
         Class.forName("com.mysql.cj.jdbc.Driver");
       } catch (ClassNotFoundException e) {
         e.printStackTrace();
       }


这一步实际上是告诉 Java 虚拟机(JVM)找到并加载 MySQL 的 JDBC 驱动类。不过,在较新的 JDBC 版本(从 JDBC 4.0 开始)中,很多驱动可以自动加载,不需要显式地使用Class.forName()方法。


  • Connection(连接对象)
    • 代表与数据库的连接。一旦驱动加载成功,就可以通过 DriverManager 来获取连接。例如:
       Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "username", "password");


这里的jdbc:mysql://localhost:3306/mydb是数据库的 URL(指定了数据库的位置和名称),usernamepassword是登录数据库的用户名和密码。Connection 对象用于管理数据库连接的状态,包括开启事务、设置事务隔离级别等操作。


  • Statement(语句对象)
    • 用于执行 SQL 语句。有三种类型:StatementPreparedStatementCallableStatement
    • Statement:这是最基本的类型,用于执行简单的 SQL 语句。例如:
       Statement statement = connection.createStatement();
       ResultSet resultSet = statement.executeQuery("SELECT * FROM users");


这里创建了一个Statement对象,并使用它执行了一个查询语句,将结果存储在ResultSet对象中。


  • PreparedStatement:它是Statement的子接口,用于执行预编译的 SQL 语句。预编译的好处是可以提高性能并且防止 SQL 注入。例如:


       PreparedStatement preparedStatement = connection.prepareStatement("SELECT * FROM users WHERE age >?");
       preparedStatement.setInt(1, 18);
       ResultSet resultSet = preparedStatement.executeQuery();


在这里,?是一个参数占位符,在执行语句之前可以通过setInt()等方法设置参数的值。


  • CallableStatement:用于执行存储过程。存储过程是数据库中的一组预定义的 SQL 语句,可以像函数一样被调用。例如,在 Oracle 数据库中调用一个存储过程:
       CallableStatement callableStatement = connection.prepareCall("{call my_procedure(?,?)}");
       callableStatement.setString(1, "input_param");
       callableStatement.registerOutParameter(2, Types.VARCHAR);
       callableStatement.execute();
       String output = callableStatement.getObject(2).toString();


这个例子展示了如何调用一个有输入和输出参数的存储过程。


  • ResultSet(结果集对象)
    • 当执行查询语句(如SELECT语句)后,结果会存储在ResultSet对象中。它就像是一个表格,包含了查询返回的所有行和列的数据。例如:
       while (resultSet.next()) {
         int id = resultSet.getInt("id");
         String name = resultSet.getString("name");
         System.out.println("ID: " + id + ", Name: " + name);
       }


这个while循环通过next()方法逐行遍历结果集,然后使用getInt()getString()等方法获取每一列的数据。


  1. 工作流程
    • 首先,加载适当的数据库驱动(如果需要)。然后,通过 DriverManager 建立与数据库的连接。接着,根据需要创建StatementPreparedStatementCallableStatement对象来执行 SQL 语句。对于查询语句,会得到一个ResultSet对象来处理返回的数据。最后,在完成所有操作后,需要关闭连接、语句和结果集对象,以释放资源。例如:
     try {
       // 加载驱动、建立连接、执行语句等操作
       //...
     } catch (SQLException e) {
       e.printStackTrace();
     } finally {
       try {
         if (resultSet!= null) {
           resultSet.close();
         }
         if (statement!= null) {
           statement.close();
         }
         if (connection!= null) {
           connection.close();
         }
       } catch (SQLException e) {
         e.printStackTrace();
       }
     }


  1. 应用场景与优势
    • 应用场景:广泛应用于各种 Java 企业级应用、Web 应用、桌面应用等,只要涉及到与数据库交互的场景都会用到 JDBC。例如,在一个电商网站中,使用 JDBC 来查询商品信息、插入订单记录、更新用户信息等。
    • 优势
      • 标准化接口:提供了统一的 API,使得 Java 程序可以方便地切换不同的数据库。只要数据库提供了相应的 JDBC 驱动,就可以使用相同的代码逻辑进行访问。
      • 高性能:通过合理的使用PreparedStatement等预编译技术,可以提高数据库操作的性能。
      • 与 Java 紧密集成:作为 Java 的一部分,与 Java 语言的其他特性(如面向对象编程、异常处理等)很好地融合在一起,方便开发人员编写高效、健壮的数据库应用程序。
【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。