首页
技术小册
AIGC
面试刷题
技术文章
MAGENTO
云计算
视频课程
源码下载
PDF书籍
「涨薪秘籍」
登录
注册
第8章 SQL高级处理
8-1 窗口函数
什么是窗口函数
窗口函数的语法
语法的基本使用方法——使用RANK函数
无需指定PARTITION BY
专用窗口函数的种类
窗口函数的适用范围
作为窗口函数使用的聚合函数
计算移动平均
两个ORDER BY
8-2 GROUPING运算符
同时得到合计行
ROLLUP——同时得出合计和小计
GROUPING函数——让NULL更加容易分辨
CUBE——用数据来搭积木
GROUPING SETS——取得期望的积木
第9章 通过应用程序连接数据库
9-1 数据库世界和应用程序世界的连接
数据库和应用程序之间的关系
驱动——两个世界之间的桥梁
驱动的种类
9-2 Java基础知识
个程序Hello,World
编译和程序执行
9-3 通过Java连接PostgreSQL
执行SQL语句的Java程序
Java是如何从数据库中获取数据的呢
执行连接数据库的程序
选取表中的数据
更新表中的数据
当前位置:
首页>>
技术小册>>
SQL基础教程(下)
小册名称:SQL基础教程(下)
### Java是如何从数据库中获取数据的呢 在软件开发领域,数据库是存储、检索和管理大量数据的核心组件。Java作为一种广泛使用的编程语言,提供了多种机制来实现与数据库的交互,包括获取、更新、删除和插入数据等操作。本章节将深入探讨Java如何通过JDBC(Java Database Connectivity)API以及现代ORM(Object-Relational Mapping)框架,如Hibernate或MyBatis,从数据库中获取数据。 #### 一、JDBC基础 ##### 1.1 JDBC简介 JDBC是Java与数据库连接的标准API,它定义了一套用于执行SQL语句、管理数据库连接和处理数据库结果集的Java接口。通过JDBC,Java应用程序可以连接到几乎所有类型的数据库系统,如MySQL、Oracle、SQL Server等,并执行SQL命令。 ##### 1.2 JDBC基本步骤 使用JDBC从数据库获取数据通常遵循以下步骤: 1. **加载数据库驱动**:Java程序需要通过类加载器显式或隐式地加载数据库驱动。 2. **建立数据库连接**:使用`DriverManager.getConnection()`方法建立与数据库的连接。 3. **创建Statement对象**:通过连接对象创建`Statement`对象,用于执行SQL语句。 4. **执行SQL查询**:通过`Statement`对象的`executeQuery()`方法执行SQL查询语句,并返回`ResultSet`对象。 5. **处理结果集**:遍历`ResultSet`对象,获取查询结果。 6. **关闭连接**:关闭`ResultSet`、`Statement`和`Connection`对象,释放数据库资源。 ##### 1.3 示例代码 以下是一个简单的JDBC示例,演示如何从MySQL数据库中查询数据: ```java import java.sql.*; public class JDBCExample { public static void main(String[] args) { // 数据库URL,用户名和密码 String url = "jdbc:mysql://localhost:3306/testdb"; String user = "root"; String password = "password"; // 加载驱动 try { Class.forName("com.mysql.cj.jdbc.Driver"); } catch (ClassNotFoundException e) { e.printStackTrace(); return; } // 建立连接 Connection conn = null; Statement stmt = null; ResultSet rs = null; try { conn = DriverManager.getConnection(url, user, password); stmt = conn.createStatement(); String sql = "SELECT id, name, age FROM users"; rs = stmt.executeQuery(sql); // 处理结果集 while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); int age = rs.getInt("age"); System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age); } } catch (SQLException e) { e.printStackTrace(); } finally { // 关闭资源 try { if (rs != null) rs.close(); if (stmt != null) stmt.close(); if (conn != null) conn.close(); } catch (SQLException e) { e.printStackTrace(); } } } } ``` #### 二、使用ORM框架 虽然JDBC提供了强大的数据库操作能力,但直接使用JDBC编写数据库交互代码往往较为繁琐且容易出错。为此,Java社区发展出了一系列ORM框架,这些框架通过对象映射技术,简化了数据库操作,提高了开发效率。 ##### 2.1 Hibernate Hibernate是Java世界中最流行的ORM框架之一。它通过将Java对象映射到数据库表,以及将Java类型映射到SQL数据类型,实现了对象与关系数据之间的无缝转换。 - **实体定义**:通过注解或XML文件定义实体类与数据库表之间的映射关系。 - **会话管理**:使用`SessionFactory`创建`Session`对象,通过`Session`进行CRUD操作。 - **查询**:支持HQL(Hibernate Query Language)和Criteria API等查询方式,也可以执行原生SQL。 ##### 2.2 MyBatis MyBatis是另一个流行的ORM框架,它不同于Hibernate的全自动映射,而是提供了更为灵活的半自动映射方式。 - **映射文件**:通过XML映射文件或注解定义SQL语句与Java方法的映射关系。 - **SqlSession**:通过`SqlSessionFactory`创建`SqlSession`,利用`SqlSession`执行SQL语句并管理事务。 - **动态SQL**:MyBatis提供了强大的动态SQL能力,能够根据不同的条件动态构建SQL语句。 ##### 2.3 示例对比 假设我们要查询用户信息,使用Hibernate和MyBatis的示例代码如下: **Hibernate示例**: ```java // 假设已有User类和相应的映射配置 Session session = sessionFactory.openSession(); List<User> users = session.createQuery("from User", User.class).list(); for (User user : users) { System.out.println(user.getName() + ", " + user.getAge()); } session.close(); ``` **MyBatis示例**(使用XML映射文件): ```xml <!-- Mapper XML中的SQL语句 --> <select id="selectUsers" resultType="User"> SELECT id, name, age FROM users </select> ``` ```java // 假设已有SqlSessionFactory SqlSession session = sqlSessionFactory.openSession(); List<User> users = session.selectList("org.mybatis.example.UserMapper.selectUsers"); for (User user : users) { System.out.println(user.getName() + ", " + user.getAge()); } session.close(); ``` #### 三、总结 Java通过JDBC和ORM框架提供了多种与数据库交互的方式。JDBC作为底层API,提供了直接操作数据库的灵活性,但编码工作相对繁琐。而ORM框架如Hibernate和MyBatis,通过对象映射和更高级的抽象,简化了数据库操作,提高了开发效率。在选择使用哪种方式时,需要根据项目的具体需求、开发团队的熟悉程度以及性能要求等因素综合考虑。无论是直接使用JDBC还是借助ORM框架,理解数据库的基本操作和Java的数据库连接技术都是必不可少的。
上一篇:
执行SQL语句的Java程序
下一篇:
执行连接数据库的程序
该分类下的相关小册推荐:
高性能的Postgres SQL
SQL基础教程(上)
PostgreSQL入门教程
SQL基础教程(中)