使用JDBC的不同行方法获取表中行数的方法?


在这个数据驱动型世界中,与数据库交互的能力是许多软件程序的重要要求。Java是一种多功能且强大的编程语言,它提供了**Java数据库连接**(JDBC),这是一种有效的机制,可以实现与不同数据库系统的流畅交互。

**JDBC**是一个API,它为Java应用程序提供了一个标准化的接口,用于与数据库通信。我们可以使用它作为Java应用程序和数据库之间的**桥梁**来执行**查询、插入、更新和删除**数据等**操作**。

本文将帮助我们深入了解Java的JDBC API的世界,使我们能够利用其功能执行高效的数据库操作。

JDBC的重要关键组件是:

  • **JDBC驱动程序**: JDBC驱动程序负责连接到数据库并将JDBC请求转换为特定于数据库的命令。确保为您的数据库系统选择正确的驱动程序,因为不同的数据库需要不同类型的驱动程序。

  • **JDBC API**: JDBC API由类和接口组成,这些类和接口指定用于执行数据库操作的方法和功能。它包含用于连接数据库、运行SQL查询、获取和修改数据以及管理事务的类。

  • **JDBC URL**: JDBC URL是一个唯一的字符串标识符,包含建立数据库连接的关键信息。此信息包含数据库类型、主机、端口、数据库名称和登录凭据等内容。

为了获取表中的行数,首先让我们在MySQL数据库中创建一个表,或者您可以使用任何您熟悉的数据库。

让我们创建一个表:

打开MySQL数据库,现在我们将创建一个新数据库并使用它。

create database Test;
use Test;

现在让我们创建一个名为Employee的表,其中包含emp_id、emp_name和emo_email字段。

查询

create table Employee(emp_id int primary key,emp_name varchar(20), emp_email varchar(20));
desc Employee;

输出

向Employee表中插入一些记录:

insert into Employee values(1,"Hari","[email protected]");
insert into Employee values(2,"Syam","[email protected]");
insert into Employee values(3,"Revanth","[email protected]");

让我们检查数据是否已插入到表中:

查询

select *from Employee;

输出

现在我们准备好了数据。让我们创建一个Java应用程序,并借助Eclipse IDE尝试连接到此数据库。创建Java应用程序后,我们需要使用JDBC驱动程序才能从我们在MySQL中创建的表中获取行数,此过程主要包括四个步骤:

  • 建立连接。

  • 创建Statement对象。

  • 执行SQL语句。

  • 关闭连接。

在建立与数据库的连接之前,我们需要加载JDBC驱动程序或从Maven仓库添加建立连接所需的MySQL依赖项,驱动程序类名将根据我们使用的数据库而有所不同。

Class.forName("com.mysql.jdbc.Driver");

或者

依赖项

<dependency>
   <groupId>mysql</groupId>
   <artifactId>mysql-connector-java</artifactId>
   <version>8.0.27</version>
</dependency>

现在,我们将使用JDBC URL、用户名和密码建立与数据库的连接。

Connection con = DriverManager.getConnection( "jdbc:mysql://127.0.0.1:3306/Test","root", "root");

一旦建立连接,我们就可以使用Statement或PreparedStatement类执行SQL语句。

主要有两种方法可以从表中获取行数,最常见的一种方法是大多数人使用的方法:

select count(*) from Employee;

但这是一种效率较低的方法,我们还有另一种方法可以获取行数:

select count(1) from Employee;

此查询使用第一列计算行数。由于主键通常是第一列,因为主键不为空并且始终是唯一的。

示例1

在这个例子中,我们使用count(1)来获取表中总记录数,方法是使用JDBC。

import java.net.ConnectException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class App {

   
   public static void main(String[] args) throws Exception
   {
      String url = "jdbc:mysql://127.0.0.1:3306/Test";
      String user ="root";
      String password = "root";
      Connection myConn = null;
      ResultSet result = null;
      try {
         //We will provide the url,username and the password to establish the connection
         myConn = DriverManager.getConnection(url,user,password);
         
         //creating a statement
         Statement myStmt = myConn.createStatement();
         
         //Total Rows is nothing but Alias name
         //and we will specify the query which we need to execute inside executeQuery()
         result= myStmt.executeQuery("select count(1) as TotalRows from Employee");
         
         //result.next() will executes the query
         result.next();
         //displaying the result i.e  we will display number of rows in the table in console
         System.out.println("Employee Table contains "+ result.getInt("TotalRows") + " rows");

      }
      catch(Exception e){
         // this catch block is used to handle the exceptions
         e.printStackTrace();
      }
      
      finally {
         //close the connection
         myConn=null;
         result=null;
      }

   }
}

输出

Employee Table contains 3 rows

示例2

我们还有另一种方法可以使用resultSet.getRow()方法来获取行数。

import java.net.ConnectException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

public class App {

   
   public static void main(String[] args) throws Exception
   {
      String url = "jdbc:mysql://127.0.0.1:3306/Test";
      String user ="root";
      String password = "root";
      Connection myConn = null;
      ResultSet result = null;
      try {
         //We will provide the url,username and the password to establish the connection
         myConn = DriverManager.getConnection(url,user,password);
         
         //creating a statement
         //TYPE_SCROLL_SENSITIVE helps to move the cursor in forward or backward direction
         //CONCUR_READ_ONLY means we cannot the update the resultSet only read is possible
         Statement myStmt = myConn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_READ_ONLY);
         //Total Rows is nothing but Alias name
         //and we will specify the query which we need to execute inside executeQuery()
         result= myStmt.executeQuery("select * from Employee");
         
         //result.next() will executes the query
         result.last();
         //displaying the result i.e  we will display number of rows in the table in console
         System.out.println("Employee Table contains " +result.getRow()+ " rows");

      }
      catch(Exception e){
         // this catch block is used to handle the exceptions
         e.printStackTrace();
      }
      
      finally {
         //close the connection
         myConn=null;
         result=null;
      }

   }
}

输出

Employee Table contains 3 rows

结论

在本文中,我们研究了如何使用JDBC获取表中总行数的方法和实现,并且我们还看到了JDBC的关键组件,这些组件能够与不同的数据库系统进行流畅的交互。

更新于:2023年8月3日

91次浏览

启动您的职业生涯

完成课程后获得认证

开始
广告