Java JDBC 中连接行集和断开行集的区别
原文:https://www . geesforgeks . org/connected-vs-disconnected-rowset-in-Java-JDBC/的区别
行集是结果集对象的包装。它可以连接到数据库,也可以从数据库断开,还可以序列化。它通过设置属性来维护一个 JavaBean 组件。您可以通过网络传递行集对象。默认情况下,行集对象是可滚动和可更新的。
此图将让您对结果集和行集类层次结构有更多的了解。找出哪个行集实现是连接的,哪个是断开的也很有用。您可以看到行集接口有两个主要的实现,连接的 JdbcRowSet 和断开的 CachedRowSet。
行集对象有两种类型,如下所示:
- 连接的行集
- 断开的行集
让我们如下讨论上述两种类型:
类型 1: 连接行集
连接的行集对象使用 JDBC 驱动程序连接到数据库。它与数据库建立连接,并执行所需的操作。连接将一直保持到行集对象关闭。
类型 2: 断开的行集
断开连接的行集对象仅在读取和写入数据库时连接到数据库。断开连接的行集对象在处理数据时不保持与数据库/数据源的连接,因此它独立运行。
断开连接的行集对象与连接的行集对象几乎相同,只是它们是:
- 与连接的行集对象相比,重量更轻。
- 可序列化。
- 能够发送数据到轻量级客户端,如手机等。
JDBC 提供了四个类来表示断开连接的行集对象,如下所示:
- CachedRowSet
- 网络浏览器
- JoinRowSet
- 过滤器数据集
让我们详细讨论上面的每一个类,以了解它们的功能如下:
第 1 类:CachedRowSet
CachedRowSet 是断开的行集的基本实现。它连接到数据源,从中读取数据,断开与数据源的连接并处理检索到的数据,重新连接到数据源,并写入修改。
第 2 类:网络行集:
网络行集扩展了缓存行集。
第 3 类:连接行集
这能够将数据发送到轻量级客户端,如手机等。
第 4 类:filteredowset:
这使您能够减少行集中可见的行数。
现在进入偏心概念,以便找出连接行集和断开行集之间的区别
正如我们在上面已经提到的,连接和断开的行集之间的主要区别是,前者总是保持数据库连接,而后者不保持。它连接到数据库,获取数据,然后关闭连接。它们之间还有一些不同之处:
1) 断开的数据库只有在它们想要读或写时才连接到数据库,在它们与数据库断开的所有时间,另一方面,连接的数据库使 JDBC 连接始终保持活动状态。
2) 只有来自 JDBC 4.1 API 的 JdbcRowSet 是连接的,其余像 CachedRowSet、WebRowSet 都是断开连接的 RowSet 实现。
3) 断开的行集是可序列化的,这就是为什么适合通过网络发送的原因
此表很好地比较了 JDBC 应用编程接口中不同行集实现所支持的功能。
| 特征 | JdbcRowSet | cachedrowset | 网络浏览器 | | --- | --- | --- | --- | | 可滚动 | 不允许 | 不允许 | 不允许 | | 可更新的 | 不允许 | 不允许 | 不允许 | | 连接的 | 不允许 | 不允许 | 不允许 | | 不连贯的 | | 不允许 | 不允许 | | 可序列化 | | 不允许 | 不允许 | | 生成 XML | | | 不允许 | | 使用 XML | | | 不允许 |Java 中的行集
实现:我们将使用 RowSet 而不是 ResultSet 接口来检索员工的记录。到目前为止,您可能只看到一个 ResultSet 对象返回查询结果,但是从 JDBC 4.1 API,您可以使用 RowSet 实现的任何实现来查询数据库和检索结果。
- 在下面的 JDBC 示例中,我们将使用 JdbcRowSet 类。要创建 JdbcRowSet 的对象,需要一个 RowSetFactory,可以使用 RowSetProvider 的【new factory()】方法创建。
- 一旦有了行集的对象,就可以通过调用它们各自的 setProperties()方法来传递数据库 URL、用户名和密码等配置详细信息,如 setURL()、T2】set username()和 setPassword() 。
- 配置完成后,是时候指定我们的 SQL SELECT Query 了,我们将使用一个名为【setCommand()的方法来提供查询。现在,您可以通过调用 execute()方法来执行查询。你注意到一个更干净简单的 API 了吗?
- 执行查询后,是时候检索数据了,这与您习惯于从 ResultSet 中调用各种 getXXX()方法非常相似。您只需要在 while 循环中通过检查 hasNext()方法 并逐行获取数据来迭代行集。
例
Java 语言(一种计算机语言,尤用于创建网站)
// Java Program to illustrate how to use RowSet,
// RowSetProvider, and RowSetFactory in JDBC
// Importing required classes
import java.sql.*;
import javax.sql.rowset.*;
// Main class
// RowSetDemo
public class GFG {
// Main driver method
public static void main(String[] args)
{
// Setting username and password to access database
String url
= "jdbc:mysql://localhost:3306/addressBook";
String userName = "root";
String password = "mysql123";
// Try block to check for exceptions
try {
// Step 1: Create a factory object for rowset
RowSetFactory rowSetFactory
= RowSetProvider.newFactory();
// Step 2: Creating a JDBC rowset object from
// the factory
JdbcRowSet rowSet
= rowSetFactory.createJdbcRowSet();
// Step 3: Setting connection properties
rowSet.setUrl(url);
rowSet.setUsername(userName);
rowSet.setPassword(password);
// Step 4: Setting SQL Query to execute
rowSet.setCommand("SELECT * FROM contact");
// Step 5: Executing an SQL query
rowSet.execute();
// Print and display the attributes
System.out.println(
"id \tName \tDepartment \tEmail \tSalary");
// Iterating over RowSet object
// using next() method
while (rowSet.next()) {
// Print and display all employee
// attributes
System.out.println(
rowSet.getInt("id") + "\t"
+ rowSet.getString("name") + "\t"
+ rowSet.getString("department") + "\t"
+ rowSet.getString("email") + "\t"
+ rowSet.getString("salary"));
}
}
// Catch block to handle the exceptions
catch (SQLException sqle) {
// Display the exception along with line number
// using printStackTrace() method
sqle.printStackTrace();
}
}
}
输出:
Id Name Department Email Salary
1 Jack Sales jack@bluechip.com 9000
2 Jill Marketing jill@bluechip.com 8000
3 Tom Accounts tom@bluechip.com 7000
从上面的输出可以清楚地看出,行集用于从数据库中检索数据,而不是结果集。
版权属于:月萌API www.moonapi.com,转载请注明出处