connection.prepareStatement ("alter session set container = YPDB2"). executeUpdate () return 0; - PullRequest
0 голосов
/ 16 апреля 2019

используйте ojbc7 для подключения oracle12c, выполнить "Изменить сеанс контейнера набора = ypdb2", кажется, не работает;

но я использую sqlplus для выполнения, это работа;

вот мой код;

OracleDataSource oracleDataSource = new OracleDataSource();
oracleDataSource.setURL("jdbc:oracle:thin:@127.0.0.1:1521/orcl");
Connection connection = oracleDataSource.getConnection("sys as sysdba", "123456");
PreparedStatement preparedStatement = connection.prepareStatement("alter session set container=YPDB2");
log.info("{}",preparedStatement.executeUpdate());

консольная печать 0 похоже, это влияет на нулевую строку;

Значит ли это, что «изменить» не удалось?

1 Ответ

0 голосов
/ 19 апреля 2019

похоже ошибка ojbc;

@Test
public void testAlterSession() throws SQLException {
    OracleDataSource oracleDataSource = new OracleDataSource();
    oracleDataSource.setURL("jdbc:oracle:thin:@127.0.0.1:1521/ypdb9");
    Connection sys_as_sysdba_connection = oracleDataSource.getConnection("sys as sysdba", "123456");
    int i = sys_as_sysdba_connection.createStatement().executeUpdate("alter session set container=ypdb9");
    log.info("i:{}",i);
    List<Map<String, Object>> maps = OdbcUtil.resultSetToList(sys_as_sysdba_connection.createStatement().executeQuery("select * from v$pdbs"));
    maps.forEach(map->log.info("{}",map));
    sys_as_sysdba_connection.createStatement().executeUpdate("alter session set container=cdb$root");
    List<Map<String,Object>> maps2 = OdbcUtil.resultSetToList(sys_as_sysdba_connection.createStatement().executeQuery("select * from v$pdbs"));
    maps2.forEach(map->log.info("{}",map));
}

В этом тесте «excuteUpdate (sql)» возвращает 0, но «контейнер» действительно меняется, когда я снова выбираю pdb;

я пока не знаю, почему;

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...