使用 JDBC 执行 SQL 语句

在上一篇文章中我们了解到什么是JDBC驱动程序以及如何打开和安全地关闭MariaDB数据库连接。接下来我们在上一篇文章的基础上学习如何使用 JDBC 对 SQL 数据库执行SELECTINSERTUPDATEDELETE语句。这些操作称为CRUD 操作(创建、读取、更新、删除),它们构成了应用程序中的大部分功能。如果你还没看过第一篇文章,点击这里查看Java应用程序连接MariaDB

在本文中,我们将构建一个使用 JDBC与MariaDB 数据库交互的简单 Java 应用程序。从最终用户的角度来看,我们不会实现具有有用功能的应用程序。我们将简单地从 Java 标准main方法中调用每个 CRUD 操作的方法。以下是我们想要实现对数据库的 CRUD 操作的方法,但是具体的方法还没有实现,后面我们会一步步的实现这些方法:

public static void main(String[] args) throws SQLException {
    try {
        createData("Java", 10);
        createData("JavaScript", 9);
        createData("C++", 8);
        readData();
        updateData("C++", 7);
        readData();
        deleteData("C++");
        readData();
    } finally {
        closeDatabaseConnection();
    }
}

使用 JDBC 插入数据

代码如下:

package com.example;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.SQLException;

public class Application {
    private static Connection connection;
    public static void main(String[] args) throws SQLException {
        try {
            openDatabaseConnection();
            //插入数据
            createData("Java", 10);
            createData("JavaScript", 9);
            createData("C++", 8);
            //插入数据结束

        } finally {
            closeDatabaseConnection();
        }
    }

    //createData()方法具体实现
    private static void createData(String name, int rating) throws SQLException {
        System.out.println("Create data: " );
        try (PreparedStatement statement = connection.prepareStatement(
                "    INSERT INTO programming_language(name, rating)\n" + "    VALUES (?, ?)\n")) {
            statement.setString(1, name);
            statement.setInt(2, rating);
            int rowsInserted = statement.executeUpdate();
            System.out.println("Rows inserted: " + rowsInserted);
        }
    }

    private static void openDatabaseConnection() throws SQLException{
        System.out.println("Opening database connection...");

        connection = DriverManager.getConnection(
                "jdbc:mariadb://localhost:3306/jdbc_demo",
                "user", "password"
        );

        System.out.println("Connection valid: " + connection.isValid(5));
    }
    private static void closeDatabaseConnection() throws SQLException {
        connection.close();
        System.out.println("Connection valid: " + connection.isValid(5));
    }

}

运行结果如下:

在这里插入图片描述

查看数据库表结果如下:

在这里插入图片描述

使用 JDBC 检索数据

要实现读取CRUD 操作,我们需要获取一个类型为ResultSet的对象,需要添加的代码如下

private static void readData() throws SQLException {
        try (PreparedStatement statement = connection.prepareStatement(
                "    SELECT name, rating\n" + "    FROM programming_language\n" + "    ORDER BY rating DESC\n")) {
            try (ResultSet resultSet = statement.executeQuery()) {
                boolean empty = true;
                while (resultSet.next()) {
                    empty = false;
                    String name = resultSet.getString("name");
                    int rating = resultSet.getInt("rating");
                    System.out.println("\t> " + name + ": " + rating);
                }
                if (empty) {
                    System.out.println("\t (no data)");
                }
            }
        }
    }

运行结果如下:

在这里插入图片描述

使用 JDBC 修改数据

Update CRUD 操作与Create操作类似,需要添加代码如下:

 private static void updateData(String name, int newRating) throws SQLException {
        try (PreparedStatement statement = connection.prepareStatement(
                "    UPDATE programming_language\n" + "    SET rating = ?\n" + "    WHERE name = ?\n")) {
            statement.setInt(1, newRating);
            statement.setString(2, name);
            int rowsUpdated = statement.executeUpdate();
            System.out.println("Rows updated: " + rowsUpdated);
        }
    }

运行结果如下:

在这里插入图片描述

使用 JDBC 删除数据

最后,从 JDBC 的角度来看, Delete CRUD 操作类似于CreateUpdate操作,需要添加的代码如下:

private static void deleteData(String nameExpression) throws SQLException {
        try (PreparedStatement statement = connection.prepareStatement("    DELETE FROM programming_language\n" + "    WHERE name LIKE ?\n")) {
            statement.setString(1, nameExpression);
            int rowsDeleted = statement.executeUpdate();
            System.out.println("Rows deleted: " + rowsDeleted);
        }
    }

运行结果如下:

在这里插入图片描述

如有不妥之处请留言指正。相互学习,共同进步!

Logo

为开发者提供学习成长、分享交流、生态实践、资源工具等服务,帮助开发者快速成长。

更多推荐