跳转至

网络编程与数据库连接:数据库操作

在本章中,我们将学习如何使用Java Database Connectivity (JDBC) 进行数据库操作。JDBC是Java中用于与数据库进行交互的标准API。通过JDBC,我们可以执行SQL语句、处理查询结果、以及管理数据库连接。

JDBC简介

JDBC(Java Database Connectivity)是Java提供的一套用于执行SQL语句的API。它允许Java应用程序与各种关系型数据库进行交互。JDBC API主要包括以下几个核心接口和类:

  • DriverManager:用于管理数据库驱动程序的列表。
  • Connection:表示与数据库的连接。
  • Statement:用于执行静态SQL语句并返回结果。
  • PreparedStatement:用于执行预编译的SQL语句。
  • ResultSet:表示数据库查询的结果集。

JDBC的基本步骤

使用JDBC进行数据库操作通常包括以下步骤:

  1. 加载数据库驱动程序:使用Class.forName()方法加载数据库驱动程序。
  2. 建立数据库连接:使用DriverManager.getConnection()方法建立与数据库的连接。
  3. 创建Statement对象:使用Connection.createStatement()方法创建Statement对象。
  4. 执行SQL语句:使用Statement.executeQuery()Statement.executeUpdate()方法执行SQL语句。
  5. 处理结果集:如果执行的是查询语句,使用ResultSet对象处理查询结果。
  6. 关闭连接:使用Connection.close()方法关闭数据库连接。

代码示例

示例1:连接到数据库

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

public class ConnectToDatabase {
    public static void main(String[] args) {
        // JDBC URL, username, and password of MySQL server
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String user = "root";
        String password = "password";

        // 1. Load the JDBC driver
        try {
            Class.forName("com.mysql.cj.jdbc.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("MySQL JDBC Driver not found.");
            e.printStackTrace();
            return;
        }

        // 2. Establish the connection
        try (Connection connection = DriverManager.getConnection(url, user, password)) {
            if (connection != null) {
                System.out.println("Connected to the database!");
            } else {
                System.out.println("Failed to make connection!");
            }
        } catch (SQLException e) {
            System.out.println("Connection Failed! Check output console");
            e.printStackTrace();
        }
    }
}

解释: - 我们首先加载MySQL的JDBC驱动程序。 - 然后使用DriverManager.getConnection()方法建立与数据库的连接。 - 如果连接成功,程序将输出“Connected to the database!”。

示例2:执行SQL查询

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class ExecuteQuery {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String user = "root";
        String password = "password";

        try (Connection connection = DriverManager.getConnection(url, user, password);
             Statement statement = connection.createStatement()) {

            // 3. Execute a query
            String sql = "SELECT id, name, email FROM users";
            ResultSet resultSet = statement.executeQuery(sql);

            // 4. Process the result set
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                String email = resultSet.getString("email");

                System.out.println("ID: " + id + ", Name: " + name + ", Email: " + email);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

解释: - 我们首先建立与数据库的连接。 - 然后创建一个Statement对象,并使用它执行SQL查询。 - 查询结果存储在ResultSet对象中,我们通过遍历ResultSet来获取每一行的数据。

示例3:插入数据

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

public class InsertData {
    public static void main(String[] args) {
        String url = "jdbc:mysql://localhost:3306/mydatabase";
        String user = "root";
        String password = "password";

        String sql = "INSERT INTO users (name, email) VALUES (?, ?)";

        try (Connection connection = DriverManager.getConnection(url, user, password);
             PreparedStatement preparedStatement = connection.prepareStatement(sql)) {

            // 3. Set the parameters
            preparedStatement.setString(1, "John Doe");
            preparedStatement.setString(2, "john.doe@example.com");

            // 4. Execute the insert statement
            int rowsInserted = preparedStatement.executeUpdate();
            if (rowsInserted > 0) {
                System.out.println("A new user was inserted successfully!");
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
}

解释: - 我们使用PreparedStatement来执行SQL插入语句。 - PreparedStatement允许我们使用占位符(?)来设置参数,这样可以防止SQL注入攻击。 - 执行executeUpdate()方法后,返回受影响的行数。

练习题

练习题1:查询特定用户

编写一个Java程序,查询数据库中users表中id为1的用户信息,并打印出该用户的nameemail

练习题2:更新用户信息

编写一个Java程序,更新users表中id为1的用户的emailnew.email@example.com

练习题3:删除用户

编写一个Java程序,删除users表中id为1的用户。

总结

在本章中,我们学习了如何使用JDBC进行数据库操作。我们介绍了JDBC的基本概念和步骤,并通过代码示例演示了如何连接到数据库、执行SQL查询、以及插入数据。我们还提供了一些练习题,帮助您巩固所学知识。

关键点: - JDBC是Java中用于与数据库进行交互的标准API。 - 使用JDBC进行数据库操作的基本步骤包括加载驱动程序、建立连接、创建Statement对象、执行SQL语句、处理结果集、以及关闭连接。 - PreparedStatement可以防止SQL注入攻击,并且比Statement更高效。

通过掌握这些知识,您将能够在Java应用程序中有效地进行数据库操作。