JAVA错误:包com.sun.rowset不可见:com.sun.rowset在模块java.sql.rowset中声明,它不会导出它

时间:2018-01-06 16:41:17

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

我只是尝试运行此代码:

import com.sun.rowset.CachedRowSetImpl;

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

当我跑步时,我得到:

  

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

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

3 个答案:

答案 0 :(得分:9)

使用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;

答案 1 :(得分:1)

这应该与Java 10一起使用

代替

<table class="table {{@tableClass}}">
  <thead>
    <tr>
      {{#each headers}}
      <th class="{{this.class}}">
        {{#if this.data }}
          {{ this.data }}
        {{ else }}
          {{ this }}
        {{/if}}
      </th>
      {{/each}}
    </tr>
  </thead>

  <tbody>
    {{#each rows}}
    <tr>
      {{#each this}}
      <td>{{this}}</td>
      {{/each}}
    </tr>
    {{/each}}
  </tbody>
</table>

使用

CachedRowSet crs = new CachedRowSetImpl();

答案 2 :(得分:0)

除了此处的答案之外,重要的是要注意您永远不要使用 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 开发人员,否则不应使用它们。