ОШИБКА JAVA: пакет com.sun.rowset не виден: com.sun.rowset объявлен в модуле java.sql.rowset, который не экспортирует его

Я просто пытаюсь запустить этот код:

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 ответа

Решение

С 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 10

Вместо

CachedRowSet crs = new CachedRowSetImpl();

использование

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

В дополнение к ответам здесь важно отметить, что вы никогда не должны использовать com.sun.rowset.CachedRowSetImpl, даже в Java 8.

Как объяснено в разделе Существуют ли какие-либо хорошие реализации CachedRowSet, кроме Sun?, то RowSetProvider стандартный способ получить CachedRowSet.

Пакеты от sunявляются внутренними и могут изменяться . Они никогда не должны использоваться разработчиками JDK.

Другие вопросы по тегам