【问题标题】:JAVA ERROR : package com.sun.rowset is not visible : com.sun.rowset is declared in module java.sql.rowset, which does not export itJAVA 错误:com.sun.rowset 包不可见:com.sun.rowset 在模块 java.sql.rowset 中声明,它不会导出它
【发布时间】:2026-02-10 10:00:01
【问题描述】:

我只是尝试运行这段代码:

import com.sun.rowset.CachedRowSetImpl;

public class Test {
    public static void main(String[] args) throws Exception{
        CachedRowSetImpl crs = new CachedRowSetImpl();
    }
}

当我运行它时,我得到:

Error:(1, 15) java: com.sun.rowset 包不可见(包 com.sun.rowset 在模块 java.sql.rowset 中声明,它没有 导出)

我正在使用 IntelliJ,我尝试导入 rs2xml.jar,但仍然没有帮助。

【问题讨论】:

  • 你在这个项目中使用的是哪个 JDK?
  • @Andremoniy 9.0.1

标签: java compiler-errors java-9 java-module


【解决方案1】:

使用Java 9,您将无法再访问此类。并且以理想的方式,您不应该这样做。那是因为这个类的包没有在模块javax.sql.rowset中导出。在Java-9 中执行此操作的正确方法是:

import javax.sql.rowset.*; 

public class Test {
    public static void main(String[] args) throws Exception {

        CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet();
    }
}

要了解我们可以到模块描述(module-info.java)找到导出包的列表:

exports javax.sql.rowset;
exports javax.sql.rowset.serial;
exports javax.sql.rowset.spi;

【讨论】:

  • 谢谢你!我刚刚了解了 Java 9 中模块的用途;))
【解决方案2】:

这应该与 Java 10 一起使用

代替

CachedRowSet crs = new CachedRowSetImpl();

使用

CachedRowSet crs = RowSetProvider.newFactory().createCachedRowSet();

【讨论】:

    【解决方案3】:

    除了这里的答案,重要的是要注意您应该永远使用com.sun.rowset.CachedRowSetImpl,即使在 Java 8 中也是如此。

    正如Are there any good CachedRowSet implementations other than the Sun one? 中所述,RowSetProvider 是获取CachedRowSet 的标准方法。

    来自sun 的包是internal and subject to change。除非 JDK 开发人员,否则永远不要使用它们。

    【讨论】:

      最近更新 更多