Java编程基础课:SQL语句基础入门及如何自定义SQL查询?不会我教你哇。

232 阅读19分钟
环境说明:Windows 10 + IntelliJ IDEA 2021.3.2 + Jdk 1.8 + navicat 

一、前言

  在这个信息技术飞速发展的时代,数据库技术已经成为软件开发不可或缺的基石。SQL,作为数据库查询和操作的标准化语言,对于任何希望在数据领域深入的开发者来说,都是一项必须掌握的技能。

  SQL,即结构化查询语言(Structured Query Language),作为与数据库交互的通用语言,这是每一位软件开发者必须掌握的关键技能。它不仅能够高效地查询、更新和管理数据,而且其语法的灵活性和强大功能使其成为开发者的得力助手。这点毋庸置疑。

  今天,我将继续带领大家深入探索数据库,特别是SQL的执行和结果处理。Java,作为一门历史悠久且功能强大的编程语言,提供了丰富的API和框架来实现数据库操作。本文将带领大家从基础到进阶,一步步深入了解SQL在Java中的应用,以Java这一广泛使用的编程语言为载体,探讨如何利用其强大的功能来执行SQL语句,并优雅地处理查询结果。无论你是数据库新手还是有一定基础的开发者,本文都将为你提供宝贵的知识和实用技巧,帮助你在数据库编程的道路上更进一步。

  在接下来的内容中,我们将详细介绍以下几个方面:

  1. SQL基础:回顾SQL的基本概念和语法结构,为不熟悉的同学打下坚实的基础。
  2. Java与数据库的连接:展示如何使用Java建立与MySQL数据库的连接,确保数据流的畅通无阻。
  3. 执行SQL语句:深入讲解如何在Java中执行各种类型的SQL语句,包括查询(SELECT)、插入(INSERT)、更新(UPDATE)和删除(DELETE)操作。(这点下文会详细讲)
  4. 结果处理:探讨如何从数据库查询中获取结果,并在Java程序中进行有效处理,包括结果集的遍历、数据的提取和异常的处理。(核心,带着大家一起实操。)

  通过本文的学习,你将能够更加自信地运用SQL和Java进行数据库编程,无论是在学术研究还是在商业项目中,都能够游刃有余。让我们一起开启这段知识的旅程,探索数据库编程的无限可能。

二、摘要

  本文我将带领大家走进SQL的世界,从基础的执行过程到Java中的实践应用,一探究竟。首先,我们会了解SQL语句是如何被解析和优化的,以及SQL引擎是如何执行这些语句的。接着,我们将深入Java的数据库操作,了解JDBC和Hibernate等技术是如何帮助我们执行SQL语句和处理结果的。通过一个具体的应用案例,我们将展示如何在Java中执行SQL查询并优雅地处理数据。最后,我们会分析Java执行SQL语句的优缺点,并提供一些实用的代码示例和测试用例,帮助大家更好地理解和掌握这些概念。

三、SQL概念

  SQL不仅仅是学习如何编写查询语句,更包括对数据的增删改查进行全面的掌握。理解SQL的基础概念,如表(Table)、行(Row)、列(Column)、主键(Primary Key)和外键(Foreign Key),是进行数据库设计和操作的前提。此外,熟悉SQL的数据类型、约束(Constraints)和索引(Indexes)等概念,也将大大提高我们处理数据的效率和质量。

四、数据库SQL使用

  这里我们先来通过原生SQL来进行实操一波,学习一下针对SQL如何操作数据,SQL语句不仅仅可以查询数据,它还包括新增、修改和删除操作。我们将通过一些简单的SQL语句示例,展示如何在数据库中进行这些操作。

  SQL的增删改查操作是数据库管理的基础。在实际应用中,我们还需要掌握更高级的SQL特性,如事务控制、存储过程、触发器和视图等。这些特性可以帮助我们构建更加强大和灵活的数据库应用程序,不过这些都是可以再进阶中去补充和完善学习的,现在不急,咱们一步一步来。

1.SQL查询

  不加条件查询用户user表。

select * from `user`;

执行结果如下:

image.png

  如果增加条件查询,例如,筛选出 age> 18 的用户信息,这该如何查询呢?

语法如下:

SELECT * FROM table_name WHERE condition;

查询SQL如下:

select * from `user` where age > 18;

执行结果如下:

image.png

2.SQL新增

  这里我给大家演示下如何通过SQL新增一个用户,演示如下:

INSERT INTO user(id, name, age,sex,address,describes) VALUES (6, "范冰冰",18,"女","四川成都","这是我新增的数据");

语法如下:

INSERT INTO table_name (column1, column2, ...) VALUES (value1, value2, ...);

执行结果如下:

image.png

然后我们再查询一下,检验是否新增成功。

image.png

3.SQL修改

  这里我们就针对我们新增的那条数据进行名称修改,具体SQL如下演示:

UPDATE user SET name = "张三" WHERE id = 6;

语法如下:

UPDATE table_name SET column1 = value1, column2 = value2 WHERE condition;

执行结果如下:

image.png

然后我们再查询一下,检验是否修改成功。

image.png

4.SQL删除

  至于删除操作,这里给个场景,把上边我新增的那条数据从数据库进行删除,那又该有何写SQL呢?其实很简单,你们往下看。

语法如下:

DELETE FROM table_name WHERE condition;

实际删除SQL如下:

DELETE FROM table_name WHERE condition;

执行结果如下:

image.png

然后我们再查询一下,检验是否删除成功。

image.png

  如上,这是我简单对MySQL数据库进行的增删改查SQL执行操作,目的就是为了引导大家能够通过简单SQL结合Java jdbc,通过代码去触发SQL操作。

五、Java如何整合SQL进行查询?

1.概述

  在Java中执行SQL语句,我们通常会用到JDBC或ORM框架。JDBC提供了一套直接与数据库交互的API,而ORM框架则提供了更高层次的抽象,让我们可以用对象的方式来操作数据库。接下来,我们将通过一个简单的Java程序,演示如何连接数据库、执行查询并处理结果。

  其中,对于在Java中与数据库建立连接,我们通常使用JDBC。JDBC作为一个标准的数据库连接API,允许Java应用程序以一种标准方式来访问和操作数据库。连接数据库通常涉及以下步骤:加载数据库驱动程序、建立连接、创建StatementPreparedStatement对象,以及执行SQL语句。每个步骤都可能抛出异常,因此适当的异常处理对于编写稳健的数据库应用程序至关重要。

2.SQL执行步骤

  这里,先同学们讲述下,SQL的执行过程通常包括哪些步骤,具体如下:

  1. SQL语句解析:将SQL语句分解为各个独立的部分,如表名、列名、操作符等。
  2. SQL语句优化:根据数据库的统计信息和查询条件,选择最优的执行计划。
  3. SQL引擎执行:根据执行计划,执行SQL语句,获取结果。

  在Java中,执行SQL语句可以使用JDBC(Java Database Connectivity)或者ORM(Object-Relational Mapping)框架,如Hibernate、Mybatis、JPA(Java Persistence API)等,如果是有项目开发基础的,甚至都可以能够使用Spring Data JPA、OpenJPA等,当然这些都是后话,一步一步来。回到基础层面,JDBC提供了一组API,用于连接数据库、执行SQL语句和处理结果。而Hibernate则封装了JDBC的细节,提供了更高层次的抽象和更简洁的代码,不过这个框架年限也是使用比较久远,大多数的项目开发使用的比较多都是Mybatis与Spring Data JPA。以上就当给同学们做个简单科普,后续我都会对应的学习教程讲解相关知识点的。

3.应用场景案例

  这里,我给大家假设一个场景,比如现在有一个用户管理系统,其中包含一个名为users的表,存储了用户的ID和姓名。现在,我们需要使用Java开发语言来查询所有用户,并返回结果集,这里我就先获取并打印演示一下即可。这个案例不仅展示了基本的数据库操作,还包含了异常处理和资源管理的最佳实践,学习价值高嘞!

            // 连接数据库
            connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/mydb", "root", "password");

            // 创建Statement对象
            statement = connection.createStatement();

            // 执行SQL语句
            resultSet = statement.executeQuery("SELECT * FROM users");

            // 处理结果
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                System.out.println("id: " + id + ", name: " + name);
            }

  执行以上代码后,将会输出所有用户的ID和姓名。如果你有时间,可以在本地实际演示一下。

4.优缺点分析

  Java执行SQL语句有其明显的优点,如标准化的API和ORM框架的高级抽象。但同时,它也有一些缺点,比如需要手动编写SQL语句和处理大量的重复性代码。了解这些优缺点有助于我们更好地选择合适的工具和方法。Java执行SQL语句的优点在于其标准化和跨数据库的兼容性。然而,通常手动编写SQL语句可能会增加出错的机会,并且对于复杂的查询,代码的维护和阅读性可能会受到影响。ORM框架如Hibernate通过将数据库表映射到Java对象,简化了数据库操作,但同时也可能带来性能开销和学习曲线。

如下,我给大家详细罗列:

其优点:

  • JDBC提供了一组标准的API,可以连接不同的数据库,并执行SQL语句。
  • ORM框架如Hibernate提供了更高层次的抽象,简化了数据库操作的代码。

其缺点:

  • 需要手动编写SQL语句,不够直观和方便。
  • 需要编写大量的重复性代码,如打开连接、关闭连接等。

5.类代码方法介绍

  在Java中执行SQL语句时,我们通常会用到几个关键的方法,如getConnectioncreateStatementexecuteQueryexecuteUpdate。这些方法分别用于建立数据库连接、创建Statement对象、执行查询和更新操作。除了基本的executeQueryexecuteUpdate之外,还有许多其他方法可以辅助我们进行数据库操作,如executeexecuteBatchclearBatch等。了解这些方法的适用场景和使用方法,可以帮助我们更高效地编写数据库操作代码,这些都是需要我们去挖掘掌握的。

详细如下:

  1. getConnection(String url, String username, String password):建立与数据库的连接。
  2. createStatement():创建Statement对象,用于执行SQL语句。
  3. executeQuery(String sql):执行查询SQL语句,并返回结果集。
  4. executeUpdate(String sql):执行更新SQL语句,如插入、更新、删除等。

6.测试用例

  为了确保我们的程序按预期工作,编写测试用例是必不可少的。我们可以编写测试用例来验证数据库连接是否成功,以及SQL语句的执行结果是否正确。编写测试用例是确保数据库操作正确性的关键步骤。测试用例应该覆盖所有可能的输入情况,包括正常情况和边界情况。此外,测试数据库操作时,还应该考虑并发访问、事务管理和数据完整性等因素,这些都是我们些测试用例需要考虑的。

  如下,是我写的大致测试步骤:

  1. 验证数据库连接是否成功。
  2. 验证SQL语句执行结果是否正确。

  在Java中执行SQL语句的案例完整代码附上,仅供参考:

a.测试代码

public class TestExecuteQuery {

    private static final String DB_URL = "jdbc:mysql://localhost:3306/springboot_db?serverTimezone=GMT%2B8&useUnicode=true&characterEncoding=utf-8"; // 数据库连接URL
    private static final String USER = "root"; // 数据库用户名
    private static final String PASSWORD = "123456"; // 数据库密码

    public static void main(String[] args) {
        Connection conn = null;
        Statement stmt = null;
        ResultSet rs = null;

        try {
            // 注册JDBC驱动程序
            Class.forName("com.mysql.cj.jdbc.Driver");

            conn = DriverManager.getConnection(DB_URL, USER, PASSWORD);
            stmt = conn.createStatement();
            String sql = "SELECT * FROM user";
            rs = stmt.executeQuery(sql);

            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                String sex = rs.getString("sex");
                // 打印结果
                System.out.println("id: " + id + ", name: " + name + ", sex: " + sex);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        } catch (ClassNotFoundException 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();
            }
        }
    }
}

b.测试结果

  根据如上的测试用例,作者在本地进行测试结果如下,仅供参考,你们也可以自行修改测试用例或者添加其他的测试数据或测试方法,以便于进行熟练学习以此加深知识点的理解。

  顺便,这里我本地通过客户端连接数据库,演示执行一下查询SQL,验证一下我案例中所执行的SQL所获取的结果集是否正确。

  这里附上我连接客户端工具的配置信息。

image.png

c.测试代码解读

  根据如上测试用例,在此我给大家进行深入详细的捋一捋测试代码的全过程,以便于更多的同学能够加深印象并且把它吃透。

  如上的测试案例,本质上就是一个简单的数据库查询示例,其核心功能是连接到MySQL数据库,并从user表中检索所有用户的信息。以下是对完整案例的代码解读,希望能够帮助到大家理解,分析如下:

  1. 定义数据库连接参数:代码的开始,我部分设定了数据库的URL、用户名和密码。这些参数是连接数据库必须的信息,就像我们访问网站需要网址一样。

  2. 尝试建立数据库连接:使用DriverManager.getConnection方法,传入上面定义的数据库连接参数,尝试与数据库建立连接。如果连接成功,就可以对数据库进行操作了。

  3. 注册JDBC驱动:通过Class.forName加载MySQL的JDBC驱动程序。这相当于告诉Java程序,我们要使用这个驱动来与MySQL数据库进行交互。

  4. 创建Statement对象:一旦连接建立,下一步是创建一个Statement对象。这个对象允许我们发送SQL命令到数据库。

  5. 执行查询:定义了一个SQL查询语句"SELECT * FROM user",意思是从user表中选择所有列的所有数据。然后使用stmt.executeQuery(sql)执行这个查询,并将结果存储在ResultSet对象rs中。

  6. 处理查询结果:通过循环遍历ResultSet对象,可以逐行读取数据。在每次循环中,使用rs.getIntrs.getString等方法根据列名获取对应的数据,并将这些数据打印出来。

  7. 异常处理:在尝试连接数据库和执行查询的过程中,可能会遇到各种异常情况,如数据库连接失败、查询出错等。代码中使用了try-catch语句来捕获这些异常,并打印出错误信息。

  8. 关闭资源:最后,无论查询是否成功,都需要在finally块中关闭数据库资源,包括ResultSetStatementConnection对象。这是为了避免资源泄露,确保程序的健壮性。

  通俗一点的讲,整个代码流程就像我们去图书馆借书:先要找到图书馆的地址(数据库URL),然后凭借读者证(用户名和密码)进入图书馆(建立数据库连接)。进去后,我们向图书管理员(Statement对象)请求一本书(执行SQL查询)。接着,我们一页一页地翻看书本(遍历ResultSet),阅读里面的内容(提取数据)。最后,不论我们是否找到需要的信息,离开图书馆时都要把书放回原位(关闭资源)。我这样讲,大家能够更清晰的理解啦!

六、全文小结

  本文的初衷是向大家介绍SQL语句执行流程并结合Java进行交互。我们从SQL的地基出发,一步步搭建起通往Java数据库操作的桥梁。在这个过程中,我们不仅学习了SQL的基本概念,还深入探讨了Java如何利用其强大的API与数据库进行对话。通过一个贴近实际的应用案例,我们演示了如何用Java对数据库执行查询,并且优雅地处理返回的结果。

  文章中,本文我主要介绍了如何在Java中执行SQL语句和使用方法,包括SQL的执行过程,Java中如何执行SQL语句的API,以及一个实际的应用场景案例。同时,对Java执行SQL语句的优缺点进行了分析,并提供了一些类代码方法介绍和测试用例,重点是帮助同学能够在使用orm框架时,别忘了巩固基础,实际上,都是在这些原理上进行的多次封装,这样也方便同学们理解orm框架的实现原理;其中,我没有忽略对Java执行SQL语句的深入分析,包括它的优势和潜在的不足。我提供了实用的代码示例和测试用例,这些都是为了让同学们在掌握理论的同时,能够动手实践,加深理解。特别地,我们提到了ORM框架,强调了在追求高级工具便捷的同时,不应忽视对基础概念的掌握。理解了这些原理,使用ORM框架时才能游刃有余,知道它们背后的逻辑。

  总而言之,本文从SQL的基础概念讲起,逐步深入到Java中如何使用SQL进行数据库操作,并通过实际案例展示了SQL语句的执行和结果处理。同时,我们也分析了Java执行SQL语句的优缺点,并提供了一些实用的代码示例和测试用例,帮助大家更好地理解和掌握这些概念。

七、总结

  掌握SQL的执行和结果处理是Java开发者必备的基础知识之一。通过本文的学习,你应该能够理解SQL的执行过程和Java中执行SQL语句的相关API,以及如何应用到实际的应用场景中;希望每位同学都能够对SQL在Java中的应用有一个全面的认识,不仅掌握基本的查询和操作,还能够了解如何编写高效、可维护的数据库代码。数据库编程是一个不断学习和进步的过程,希望本文能够成为大家在这个过程中的一块垫脚石。对于Java开发者而言,能够熟练地执行SQL语句并处理结果是基本技能。本文的学习目标是让每位同学都能够对SQL的执行过程有一个清晰的认识,掌握如何在Java中发出SQL命令,并理解如何将这些命令应用到真实项目中。我们希望通过本文,不仅你能够学会基本的数据库查询和操作,还能够学会编写出既高效又易于维护的代码。数据库编程是一个不断探索的旅程,希望本文能成为大家在这条路上的一块坚实的垫脚石。

八、结尾

  随着文章接近尾声,我们希望这篇指南能够成为Java开发者在数据库领域的一盏明灯。我们不仅提供了技术层面的指导,更希望能够激发同学对数据库编程深层次的思考。如果你在学习过程中遇到任何难题或有独到的见解,欢迎随时交流,共同进步,我总结这篇文章,主要是通过详细的示例和清晰的解释,为Java开发者提供了SQL语句执行和结果处理的实用指南。

  同时,希望本文对你理解Java中SQL的执行和结果处理有所帮助。如果你有任何问题或建议,请随时与bug菌联系,当然,我想强调的也是最重要的一点,学习数据库编程不仅仅是为了掌握一项技能,更是为了培养一种思维方式。通过对SQL和Java的深入学习,我们能够更加清晰地理解数据的流动和转换,从而在面对复杂问题时,能够设计出更加优雅和高效的解决方案。学习数据库编程,我们不仅仅是在学一项技术,更是在培养解决问题的能力。掌握了SQL和Java的结合使用,我们就能更深入地理解数据的本质,更优雅地处理数据流转,设计出更加精妙的解决方案。愿每位同学都能在技术的海洋中乘风破浪,不断探索,不断超越。

  「学海无涯,心存高远」,愿我们都能保持对知识的渴望和对探索的热情。期待在未来的某一天,我们能以更加丰富的经验和更深层次的理解,再次相聚,共同迎接新的技术挑战。祝愿每位同学技术精进,前程似锦,我们下期再见~~。

本文为稀土掘金技术社区首发签约文章,30天内禁止转载,30天后未获授权禁止转载,侵权必究!