在JDBC中,Statement接口提供了三种执行SQL语句的方法:execute(), executeQuery(), 和 executeUpdate()。它们分别用于不同类型的SQL操作。下面将详细介绍这三种方法的区别,并通过代码示例进行说明。

1. execute() 方法

  • 用途:用于执行任意的SQL语句,可以是查询、更新、插入或删除等。
  • 返回值:如果执行的是查询语句,则返回一个 ResultSet 对象;如果是更新语句(如INSERT, UPDATE, DELETE),则返回一个整数,表示受影响的行数;如果是其他类型的SQL语句,则返回布尔值 true

2. executeQuery() 方法

  • 用途:专门用于执行查询语句(SELECT)。
  • 返回值:返回一个 ResultSet 对象,包含查询结果。
  • 限制:只能用于执行查询语句,不能用于执行更新、插入或删除操作。

3. executeUpdate() 方法

  • 用途:用于执行更新语句(如INSERT, UPDATE, DELETE)以及DDL语句(如CREATE, ALTER, DROP)。
  • 返回值:返回一个整数,表示受影响的行数。
  • 限制:不能用于执行查询语句。

代码示例:使用 execute()executeQuery(), 和 executeUpdate() 方法

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

public class JdbcExecuteMethodsExample {
    public static void main(String[] args) {
        // 数据库URL、用户名和密码
        String jdbcUrl = "jdbc:mysql://localhost:3306/your_database";
        String username = "your_username";
        String password = "your_password";

        Connection connection = null;
        Statement statement = null;
        ResultSet resultSet = null;

        try {
            // 1. 注册JDBC驱动(可选步骤,现代JDBC驱动会自动注册)
            Class.forName("com.mysql.cj.jdbc.Driver");

            // 2. 打开一个连接
            connection = DriverManager.getConnection(jdbcUrl, username, password);

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

            // 4. 使用 execute() 方法执行查询语句
            String querySql = "SELECT id, name, age FROM your_table";
            boolean isResultSet = statement.execute(querySql);
            if (isResultSet) {
                resultSet = statement.getResultSet();
                while (resultSet.next()) {
                    int id = resultSet.getInt("id");
                    String name = resultSet.getString("name");
                    int age = resultSet.getInt("age");
                    System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
                }
            } else {
                int updateCount = statement.getUpdateCount();
                System.out.println("Update Count: " + updateCount);
            }

            // 5. 使用 executeUpdate() 方法执行更新语句
            String updateSql = "UPDATE your_table SET age = age + 1 WHERE id = 1";
            int rowsAffected = statement.executeUpdate(updateSql);
            System.out.println("Rows Affected by Update: " + rowsAffected);

            // 6. 使用 executeQuery() 方法执行查询语句
            String selectSql = "SELECT id, name, age FROM your_table";
            resultSet = statement.executeQuery(selectSql);
            while (resultSet.next()) {
                int id = resultSet.getInt("id");
                String name = resultSet.getString("name");
                int age = resultSet.getInt("age");
                System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
            }
        } catch (SQLException | ClassNotFoundException e) {
            e.printStackTrace();
        } finally {
            // 7. 关闭资源
            try {
                if (resultSet != null) resultSet.close();
                if (statement != null) statement.close();
                if (connection != null) connection.close();
            } catch (SQLException e) {
                e.printStackTrace();
            }
        }
    }
}

代码详解

1. 导入必要的包
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
  • Connection:表示与数据库的连接。
  • DriverManager:用于管理一组JDBC驱动程序的基本服务。
  • ResultSet:表示数据库查询的结果集。
  • SQLException:处理SQL相关的异常。
  • Statement:用于执行静态SQL语句并返回生成的结果。
2. 定义数据库连接参数
String jdbcUrl = "jdbc:mysql://localhost:3306/your_database";
String username = "your_username";
String password = "your_password";
  • jdbcUrl:数据库的URL,包括协议、主机名、端口号和数据库名称。
  • username:数据库用户名。
  • password:数据库密码。
3. 声明连接、语句和结果集对象
Connection connection = null;
Statement statement = null;
ResultSet resultSet = null;
  • connection:用于保存数据库连接对象。
  • statement:用于执行SQL语句的对象。
  • resultSet:用于保存查询结果的对象。
4. 加载JDBC驱动(可选)
Class.forName("com.mysql.cj.jdbc.Driver");
  • 加载MySQL的JDBC驱动类。现代JDBC驱动通常会自动注册,所以这一步可以省略。
5. 建立数据库连接
connection = DriverManager.getConnection(jdbcUrl, username, password);
  • 使用DriverManager类的getConnection方法建立与数据库的连接。
6. 创建并执行SQL语句
statement = connection.createStatement();
  • 创建一个Statement对象来执行SQL语句。
7. 使用 execute() 方法执行查询语句
String querySql = "SELECT id, name, age FROM your_table";
boolean isResultSet = statement.execute(querySql);
if (isResultSet) {
    resultSet = statement.getResultSet();
    while (resultSet.next()) {
        int id = resultSet.getInt("id");
        String name = resultSet.getString("name");
        int age = resultSet.getInt("age");
        System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
    }
} else {
    int updateCount = statement.getUpdateCount();
    System.out.println("Update Count: " + updateCount);
}
  • 使用execute()方法执行查询语句,并根据返回值判断是查询还是更新操作。如果是查询操作,获取结果集并处理数据;如果是更新操作,获取受影响的行数。
8. 使用 executeUpdate() 方法执行更新语句
String updateSql = "UPDATE your_table SET age = age + 1 WHERE id = 1";
int rowsAffected = statement.executeUpdate(updateSql);
System.out.println("Rows Affected by Update: " + rowsAffected);
  • 使用executeUpdate()方法执行更新语句,并获取受影响的行数。
9. 使用 executeQuery() 方法执行查询语句
String selectSql = "SELECT id, name, age FROM your_table";
resultSet = statement.executeQuery(selectSql);
while (resultSet.next()) {
    int id = resultSet.getInt("id");
    String name = resultSet.getString("name");
    int age = resultSet.getInt("age");
    System.out.println("ID: " + id + ", Name: " + name + ", Age: " + age);
}
  • 使用executeQuery()方法执行查询语句,并获取结果集进行处理。
10. 关闭资源
try {
    if (resultSet != null) resultSet.close();
    if (statement != null) statement.close();
    if (connection != null) connection.close();
} catch (SQLException e) {
    e.printStackTrace();
}
  • finally块中关闭资源,确保无论是否发生异常都能正确释放数据库资源。

java八股文电籽版整理好啦,需要的可以思博主!!

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐