session - connection.prepareStatement("alter session set container=YPDB2").executeUpdate() return 0;
问题描述
使用ojbc7连接oracle12c,执行“alter session set container=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 似乎影响零行;
这是否意味着“改变”没有成功?
解决方案
这似乎是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 时,“容器”确实发生了变化;
我还不知道为什么;
推荐阅读
- asp.net - 使用 Blazor WebAssembly 的复合 UI
- c# - SignalR v1.1.3。升级到服务器 2016 后,在应用启动期间无法解析集线器
- java - 如何制作一个可以同时保存字符串和整数的队列数组?
- cmake - 如何防止 CMake 从 add_subdirectory() 包含的项目中安装()-ing 目标?
- node.js - 使用没有中间件功能的 multer 上传到 S3
- python - 熊猫计算范围之间每个值的出现次数
- reactjs - NotSupportedError:无法获取 ServiceWorkerRegistration 对象:用户拒绝使用 Service Worker 的权限
- ios - 无法在 Xcode 12 上启动 iOS 13.7 模拟器
- python - VIDIOC_G_STD:失败:不适当的 ioctl doer 设备
- r - rmarkdown 加密输出丢失情节和传单情节