JDBC - 删除记录



本章提供使用 JDBC 应用程序从表中删除记录的示例。在执行以下示例之前,请确保已完成以下步骤:

  • 要执行以下示例,您可以将用户名密码替换为您实际的用户名和密码。

  • 您的 MySQL 或您正在使用的任何数据库正在运行。

必要步骤

使用 JDBC 应用程序创建新数据库需要以下步骤:

  • 导入包 - 需要包含包含数据库编程所需 JDBC 类的包。大多数情况下,使用import java.sql.*就足够了。

  • 注册 JDBC 驱动程序 - 需要初始化一个驱动程序,以便您可以打开与数据库的通信通道。

  • 打开连接 - 需要使用DriverManager.getConnection()方法创建一个 Connection 对象,该对象表示与数据库服务器的物理连接。

  • 执行查询 - 需要使用 Statement 类型的对象来构建和提交 SQL 语句以从表中删除记录。此查询使用WHERE子句删除条件记录。

  • 清理环境 - try with resources 会自动关闭资源。

示例:从表中删除记录

在这个示例中,我们有四个静态字符串,包含数据库连接 URL、用户名、密码和 SELECT 查询。现在使用 DriverManager.getConnection() 方法,我们准备了一个数据库连接。连接准备就绪后,我们使用 createStatement() 方法准备了一个 Statement 对象。下一步,我们准备并执行了对 REGISTRATION 表的更新查询,方法是调用 statement.executeUpdate() 方法,我们在其中删除了注册 ID 为 101 的记录。然后使用 executeQuery(),所有记录都被提取并存储在 ResultSet 对象中。ResultSet 被迭代,所有记录都被打印出来。

将以下示例复制并粘贴到 JDBCExample.java 中,编译并运行如下:

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

public class JDBCExample {
   static final String DB_URL = "jdbc:mysql://127.0.0.1/TUTORIALSPOINT";
   static final String USER = "guest";
   static final String PASS = "guest123";
   static final String QUERY = "SELECT id, first, last, age FROM Registration";

   public static void main(String[] args) {
      // Open a connection
      try(Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         Statement stmt = conn.createStatement();
      ) {		      
         String sql = "DELETE FROM Registration " +
            "WHERE id = 101";
         stmt.executeUpdate(sql);
         ResultSet rs = stmt.executeQuery(QUERY);
         while(rs.next()){
            //Display values
            System.out.print("ID: " + rs.getInt("id"));
            System.out.print(", Age: " + rs.getInt("age"));
            System.out.print(", First: " + rs.getString("first"));
            System.out.println(", Last: " + rs.getString("last"));
         }
         rs.close();
      } catch (SQLException e) {
         e.printStackTrace();
      } 
   }
}

输出

现在让我们按如下方式编译上述示例:

C:\>javac JDBCExample.java
C:\>

运行JDBCExample时,会产生以下结果:

C:\>java JDBCExample
ID: 100, Age: 30, First: Zara, Last: Ali
ID: 102, Age: 30, First: Zaid, Last: Khan
ID: 103, Age: 28, First: Sumit, Last: Mittal
C:\>

示例:使用 LIMIT 从表中删除记录

我们可以使用 LIMIT 子句删除有限的记录。

DELETE FROM employees ORDER BY age LIMIT 3

要删除的行数由 LIMIT 子句设置。在上面的 SQL 中,将删除 3 行。

在这个示例中,我们有三个静态字符串,包含数据库连接 URL、用户名、密码。现在使用 DriverManager.getConnection() 方法,我们准备了一个数据库连接。连接准备就绪后,我们使用 createStatement() 方法准备了一个 Statement 对象。下一步,我们准备并执行了对 employees 表的选择查询,方法是调用 statement.executeQuery() 方法,我们在其中检索所有记录,然后使用 showResults() 方法打印所有记录。showResults() 方法迭代结果集的所有记录以打印它们。

使用 executeUpdate(),执行带 LIMIT 子句的删除查询,然后再次使用 employees 表上的选择查询,打印所有记录以显示删除记录的结果。

如果在连接到数据库时出现任何异常,catch 块将处理 SQLException 并打印堆栈跟踪。

将以下示例复制并粘贴到 JDBCExample.java 中,编译并运行如下:

import java.sql.*;

// This class demonstrates DELETE command with LIMIT
public class DeleteWithLimit {

   static final String DB_URL = "jdbc:mysql://127.0.0.1/TUTORIALSPOINT";
   static final String USER = "root";
   static final String PASS = "guest123";

   public static void main(String args[]) {
      try{
         Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         String sel_qry = "select * from employees ";
         String del_qry = "DELETE FROM employees ORDER BY age LIMIT 3 ";
         Statement stmt = conn.createStatement();

         ResultSet rs = stmt.executeQuery(sel_qry);
         System.out.println(" Displaying records before deletion ");
         System.out.println(" ----------------------------------" );
         showResults(rs);

         stmt.executeUpdate(del_qry);
         System.out.println("Displaying records after deletion..");
         System.out.println(" ----------------------------------" );
         rs = stmt.executeQuery(sel_qry);
         showResults(rs);
         rs.close();
         stmt.close();
         conn.close();
      }catch(SQLException e){
         e.printStackTrace();
      }   
   }

   public static void showResults(ResultSet res) {
      try{
         while(res.next()){
            System.out.print("ID: " + res.getInt(1));
            System.out.print(", AGE: " + res.getInt(2));
            System.out.print(", FirstName: " + res.getString(3));
            System.out.println(", LastName: " + res.getString(4));
         }
         System.out.println(" ----------------------------------" );
      }catch(SQLException sqle){
         sqle.printStackTrace();
      }
   }
}

输出

现在让我们按如下方式编译上述示例:

C:\>javac JDBCExample.java
C:\>

运行JDBCExample时,会产生以下结果:

C:\>java JDBCExample
Displaying records before deletion 
 ----------------------------------
ID: 1, AGE: 50, FirstName: Shahbaz, LastName: Ali
ID: 2, AGE: 25, FirstName: Mahnaz, LastName: Fatma
ID: 3, AGE: 20, FirstName: Zaid, LastName: Khan
ID: 4, AGE: 28, FirstName: Sumit, LastName: Mittal
ID: 7, AGE: 20, FirstName: Rita, LastName: Tez
ID: 8, AGE: 20, FirstName: Sita, LastName: Singh
ID: 21, AGE: 35, FirstName: Jeevan, LastName: Rao
ID: 22, AGE: 40, FirstName: Aditya, LastName: Chaube
ID: 25, AGE: 35, FirstName: Jeevan, LastName: Rao
ID: 26, AGE: 35, FirstName: Aditya, LastName: Chaube
ID: 34, AGE: 45, FirstName: Ahmed, LastName: Ali
ID: 35, AGE: 51, FirstName: Raksha, LastName: Agarwal
 ----------------------------------
Displaying records after deletion..
 ----------------------------------
ID: 1, AGE: 50, FirstName: Shahbaz, LastName: Ali
ID: 2, AGE: 25, FirstName: Mahnaz, LastName: Fatma
ID: 4, AGE: 28, FirstName: Sumit, LastName: Mittal
ID: 21, AGE: 35, FirstName: Jeevan, LastName: Rao
ID: 22, AGE: 40, FirstName: Aditya, LastName: Chaube
ID: 25, AGE: 35, FirstName: Jeevan, LastName: Rao
ID: 26, AGE: 35, FirstName: Aditya, LastName: Chaube
ID: 34, AGE: 45, FirstName: Ahmed, LastName: Ali
ID: 35, AGE: 51, FirstName: Raksha, LastName: Agarwal
 ----------------------------------

C:\>

示例:使用 JOIN 删除记录

我们将展示如何使用 JOIN 从两个表中删除数据。删除之前,STUDENTS 和 SAMPLEDB4 表如下所示。请注意,一些 StudentID(在 STUDENTS 表中)与 Sampledb4 中的 ID 相同。FirstName 也类似。

Students, SampleDB tables

在这个示例中,我们有三个静态字符串,包含数据库连接 URL、用户名、密码。现在使用 DriverManager.getConnection() 方法,我们准备了一个数据库连接。连接准备就绪后,我们使用 createStatement() 方法准备了一个 Statement 对象。下一步,我们准备并执行了对 students 和 sampledb4 表的删除查询,方法是调用 statement.executeUpdate() 方法,我们在其中删除了 ID 也出现在 sampledb4 表中的学生记录。然后使用 executeQuery(),所有记录都被提取并存储在 ResultSet 对象中。ResultSet 被迭代,记录被打印出来。

如果在连接到数据库时出现任何异常,catch 块将处理 SQLException 并打印堆栈跟踪。

将以下示例复制并粘贴到 JDBCExample.java 中,编译并运行如下:

import java.sql.*;

public  class JDBCExample {
   static final String DB_URL = "jdbc:mysql://127.0.0.1/TUTORIALSPOINT";
   static final String USER = "root";
   static final String PASS = "guest123";
   
   public static void main(String args[]) {
      try{
         Connection conn = DriverManager.getConnection(DB_URL, USER, PASS);
         String del_qry = "delete sampledb4 from students INNER JOIN"+
         " sampledb4 where students.studentID = sampledb4.id";
         Statement stmt = conn.createStatement();
         stmt.executeUpdate(del_qry);

         System.out.println("Displaying records after deletion..");
         System.out.println(" ----------------------------------" );
         ResultSet rs = stmt.executeQuery("select * from sampledb4");

         while(rs.next()){
            System.out.print("ID: " + rs.getInt(1));
            System.out.println(", Name: " + rs.getString(2));
         }

         System.out.println("-----------------------------------");

         rs.close();
         stmt.close();
         conn.close();

      }catch(SQLException e){
         e.printStackTrace();
      }
   }
}

输出

现在让我们按如下方式编译上述示例:

C:\>javac JDBCExample.java
C:\>

运行JDBCExample时,会产生以下结果:

C:\>java JDBCExample
Displaying records after deletion..
 ----------------------------------
ID: 3, Name: Sachin
ID: 4, Name: Kishore
-----------------------------------

C:\>
广告