如何在 Java 中从 SQL*Plus 以“SYS”身份连接到 Oracle

2023-12-01

我想连接到 Oracle 作为SYS来自 Java 中的 SQL*Plus。但我无法连接。 但我能够以名为的用户进行连接SCOTT。我的代码片段如下:

public static void test_script () {  

        String fileName = "@t.sql";  
        //t.sql contains "show user" command
        String sqlPath = "D:\\";  

        String sqlCmd = "sqlplus";  
       // String arg1   = "scott/tiger@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname)(Port=PORT ID))(CONNECT_DATA=(SID=SID)))";
        String arg1   = "sys as sysdba/tiger@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname)(Port=PORT ID))(CONNECT_DATA=(SID=SID)))";

       //String arg1="/ as sysdba";

        String arg2= fileName;
        //String arg2="conn /as sysdba";
        try {  
            String line;  
            ProcessBuilder pb = new ProcessBuilder(sqlCmd, arg1,arg2);  
            Map<String, String> env = pb.environment();  
            env.put("VAR1", arg1);  
            env.put("VAR2", arg2);  
            //env.put("VAR3", arg3);
            pb.directory(new File(sqlPath));  
            pb.redirectErrorStream(true);  
            Process p = pb.start();  
            BufferedReader bri = new BufferedReader  
            (new InputStreamReader(p.getInputStream()));  
            BufferedReader bre = new BufferedReader  
            (new InputStreamReader(p.getErrorStream()));  
            while ((line = bri.readLine()) != null) {  
            System.out.println(line);  
            }  
            bri.close();  
            while ((line = bre.readLine()) != null) {  
            System.out.println(line);  
            }  
            bre.close();  
            System.out.println("\n\n\n");
            System.out.println("Done.");  
            }  
            catch (Exception err) {  
                err.printStackTrace();  
            }  
        }  
   } 

当我尝试运行此代码时,我发现此错误:

SQL*Plus: Release 11.2.0.1.0 Production on Thu Apr 10 11:08:59 2014

Copyright (c) 1982, 2010, Oracle.  All rights reserved.


SQL*Plus: Release 11.2.0.1.0 Production

Copyright (c) 1982, 2010, Oracle.  All rights reserved.

Use SQL*Plus to execute SQL, PL/SQL and SQL*Plus statements.

Usage 1: sqlplus -H | -V

    -H         Displays the SQL*Plus version and the
           usage help.
    -V         Displays the SQL*Plus version.

Usage 2: sqlplus [ [<option>] [{logon | /nolog}] [<start>] ]
...

...以及 SQL*Plus 的其余“使用”信息。

难道我供应错了arg1争论或是否有任何其他方式连接SYS通过 Java 在 Oracle 中。


您将所有连接信息作为单个值传递;与命令行中的等效:

sqlplus "sys as sysdba/tiger@<connect_string>"

这将得到与打印 SQL*Plus 登录帮助相同的响应。您也将密码放在了错误的位置,但还没有达到这种程度。从命令行这可以工作:

sqlplus "sys/tiger" "as" "sysdba@<connect_string>"

所以你需要传递 5 个参数ProcessBuilder, 就像是:

    String sqlCmd = "sqlplus";  
    String arg1   = "sys/tiger";
    String arg2   = "as";
    String arg3   = "sysdba@(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(Host=hostname)(Port=PORT ID))(CONNECT_DATA=(SID=SID)))";
    String arg4   = fileName;
    ...
        ProcessBuilder pb = new ProcessBuilder(sqlCmd, arg1, arg2, arg3, arg4);

仅当您的环境配置为允许远程连接时,这仍然有效sysdba。做任何事情都像sys应该非常罕见,并且有一个您想要运行的脚本sys看起来很不寻常,以至于 Java 包装器看起来有点矫枉过正 - 并让您看起来可以像这样连接sys例行公事,这不是一个好主意 - 但也许这只是一个学习练习。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 Java 中从 SQL*Plus 以“SYS”身份连接到 Oracle 的相关文章

随机推荐

  • Twitter 的 Bootstrap 移动版:更多专栏

    关于twitter bootstrap 我目前有一个设计 在网格中显示图片 div class row fluid div class image span 4 div div class image span 4 div div clas
  • 稀疏矩阵图 matlab

    我有一个 5000 5000 稀疏矩阵 有 4 个不同的值 我想用 4 种不同的颜色可视化非零元素 以便我可以识别这些值的比率以及它们之间的关系 我使用imagesc但我不能很好地识别不同的值 特别是比率较小的值 我认为如果我为每个值使用一
  • plotly choropleth 地图:显示国家/地区名称

    考虑以下 R 代码以绘图方式生成分区统计图 devtools install github ropensci plotly library plotly df lt read csv https raw githubusercontent
  • VB.NET 中具有两个属性的 DistinctBy

    看着选择列表中两个不同的属性可以使用具有两个属性的 DistinctBy 扩展方法 我尝试将其转换为 vb net 但没有得到预期的结果 测试类 Public Class Test Public Property Id As Integer
  • C++ 编译器优化器是否允许破坏我的析构函数被多次调用的能力?

    我们曾经采访过一位非常有经验的 C 开发人员 他无法回答以下问题 C 中派生类析构函数是否需要调用基类析构函数 显然答案是不 C 无论如何都会自动调用基类析构函数 但是如果我们尝试拨打电话怎么办 在我看来 结果将取决于基类析构函数是否可以被
  • 如何截取 Android 布局的屏幕截图?

    我的问题是如何使用内置屏幕截图来截取屏幕截图 任何提示或示例代码将不胜感激 有两种方法你可以尝试 使用Eclipse 在 Eclipse 中打开 设备 视图 窗口菜单 gt 显示视图选项 gt 其他 Android gt 设备 右侧有一个工
  • 如果将 ImageResizer 与 Azure blob 一起使用,我是否需要 AzureReader2 插件?

    我正在开发一个个人项目来管理我的俱乐部的用户 它托管在免费的 Azure 包上 至少目前如此 部分作为试用 Azure 的实验 创建他们的记录的一部分是添加照片 因此我有一个联系人卡片视图 可以让我看到他们是谁 他们何时来以及一张照片 我已
  • 我应该尽可能避免使用 JS 而使用 CSS 吗? [关闭]

    Closed 这个问题是基于意见的 目前不接受答案 我正在寻找最佳实践答案 目前我正在尝试向我网站的导航栏添加一个下拉菜单 我发现我可以使用 CSS 来做到这一点 而且我也可以使用 JS Angular 来做到这一点 我读到过 因为使用 J
  • 使用 Selenium 将元素滚动到视图中

    Selenium 1 x 或 2 x 中是否有任何方法可以滚动浏览器窗口 以便 XPath 标识的特定元素位于浏览器的视图中 Selenium 中有一个 focus 方法 但在 FireFox 中似乎没有物理滚动视图 有人对如何做到这一点有
  • D3.js 如何将力布局的节点排列在圆上

    我开发了一种力量布局来代表社会群体之间的关系 现在我想让节点分布在一个圆圈中 并有链接连接它们 做这个的最好方式是什么 完整版本的代码 没有数据 在这里http jsfiddle net PatriciaW zZSJT 为什么我也必须在这里
  • UICollectionView 和补充视图崩溃

    我有一个 UICollectionView 工作正常 有 2 种方法可以到达此页面 虽然应用程序 点击推送通知 除了一种情况外 一切都很好 如果用户正在聊天 然后退出应用程序 主页按钮 然后他收到一条推送通知 按下它 应用程序崩溃了 cra
  • Matlab - 如何以函数内的字符串形式检索函数调用的确切参数列表?

    假设我有以下功能 function name the paramlist varargin Print out varargin exactly how it is called as a string 基本上我想要它做的是 调用 name
  • 运行 pyinstaller 时出错(1920,“LoadLibraryEx”,“系统无法访问该文件”)

    我试图将我的 python 脚本编译为 exe 以便我可以将其发送给可以使用而无需安装 python 的朋友 但我遇到了问题并且无法找到解决方案 我发现了类似的问题Pyinstaller win32ctypes pywin32 pywint
  • 单击按钮时将道具传递给另一个组件

    在我的 nextJS 应用程序中 我想将一个组件的 props 传递给另一个组件 该组件既不是第一个组件的父组件 也不是第一个组件的子组件 我该怎么做 有一个Orderdiv 内的组件Orders页面和OrderViewer在另一个 div
  • 用 Monadic 咒语召唤 JQuery Deferred

    灵感来自this 优秀 关于在 javascript 中使用 Promises 的讨论 我正在尝试弄清楚如何使用 Deferred 将异步和非异步函数链接在一起 以避免在使用我的 时支付回调税全局存储 code 我有一些与此相关的问题 但我
  • 我如何知道 AppDelegate 中的方向发生了变化

    设备如何知道方向变化的功能是 void viewWillLayoutSubviews 和 void viewDidLayoutSubviews 但是 它们只是在控制器中 现在我想知道是否有类似的函数可以知道文件 AppDelegate m
  • 如何使用 Elixir/phoenix 从 csv 文件导入用户?

    我有一个包含用户列表的 csv 文件以及 UserController 内的以下导入方法 我想通过使用表单提交 csv 文件来导入这些用户 看来我做错了 用户控制器 def import conn user gt user params d
  • 在 Windows Phone 8 上启动 PDF 阅读器

    我正在尝试使用下面的代码启动 pdf 阅读器 但它不起作用 有人可以帮助我吗 private async Task
  • 如何使用 angular2 http API 跟踪上传/下载进度

    因此 有许多临时库支持 Angular2 中的上传 下载进度 我不知道如何使用本机 Angular2 http api 在上传 下载时显示进度 我想使用原生http api的原因是因为我想利用 围绕本机 http api 的 http 拦截
  • 如何在 Java 中从 SQL*Plus 以“SYS”身份连接到 Oracle

    我想连接到 Oracle 作为SYS来自 Java 中的 SQL Plus 但我无法连接 但我能够以名为的用户进行连接SCOTT 我的代码片段如下 public static void test script String fileName