ubuntu系统中运行java程序调用oracle 的sqlplus,为什么找不到sqlplus呢?这个是我的代码:Runtime.getRuntime().exec("sqlplus aaa/aaa@tmp @/home/oracle/database.sql");报错如下:
java.io.IOException: Cannot run program "sqlplus": java.io.IOException: error=2, No such file or directory为了避免误会我特别测试了一下,这和后面/home/oracle/database.sql的路径和文件权限没有任何关系,
原因在于找不到sqlplus,后来我又测试了一下,用sqlplus的绝对路径/opt/oracle/bin/sqlplus确实可以成功
执行,(说明一下我在终端中用oracle用户可以执行sqlplus,只是在程序里才必须要用绝对路径)请问这个
是什么地方的原因呢?我该怎么改?这个问题困扰我几天了,痛苦阿!
:em06 :em06 :em06 :em06 :em06 :em06 :em06 :em06 :em06 :em06 :em06 :em06 :em06 :em06 :em06

解决方案 »

  1.   

                 我估计是我oracle什么地方的配置有点问题,但是网上多没有看到这方面的资料,没办法,只有来请教各位了!
      

  2.   

    SQLPLUS 全路径试试
    例如:/u/app/oracle/product/10.2.0/db_1/bin/sqlplus aaa  ............
      

  3.   

    不好意思,没看清楚,我觉得应该是环境变量的问题
    JAVA 程序不会自动去读取LINUX的 PROFILE文件,。个人猜测
      

  4.   

    一个解决方法就是  用JAVA获取ORACLE_HOME的值,
    $ORACLE_HOME/bin/sqlplus .........
      

  5.   

    你java执行的用户是oracle么,如果不是oracle是没有运行权限的。
      

  6.   


    java执行sql文件,可以使用一些java写的开源包呀,比如dbutil
      

  7.   

     SQLPLUS 全路径试试 
    例如:/u/app/oracle/product/10.2.0/db_1/bin/sqlplus aaa  ............ 
     
    用全路径确实可以,(上面我已经说了一次了)可是不可能要求客户把oracle建在固定的目录下把
    这个不现实!
      

  8.   

    一个解决方法就是  用JAVA获取ORACLE_HOME的值, 
    $ORACLE_HOME/bin/sqlplus .........
    这个我也已经试过了,程序还是把它当作是$ORACLE_HOME/bin,不会认为是oracle的安装路径!
      

  9.   


    我的linux只登陆了一个oracle用户,就是怕程序调用其他用户的终端!
    所以不能怀疑肯定是oracle用户,而且也没有权限方面的问题我的oracle
    tomcat多是安装在oracle用户下!
      

  10.   


    执行sql脚本,不应该用sqlplus调用的方式,应该用java调用jdbc的方式,有很多的开源包都做的很好了比如apache-dbutils.用Runtime.exec的方式不好。
      

  11.   

    请问该怎么用呢,那些东西多没有用过,不知道怎么用,我现在的作用是需要调用
    /home/oracle/database.sql文件在oracle的wishcms用户下建表,database.sql
    里面全多是建表的语句!
      

  12.   

    要是实在不行,
    绕个圈子就是了,JAVA,调用SHELL,SHELL再调用SQLPLUS
      

  13.   

    阿 哈哈哈,终于搞定了
    在这里分享一下:原来是我的oracle的安装路径的文件所有者的问题
    因为我安装在自己建的目录下面,默认的是属于root
    用户的,后来我把文件改成oracle的,果然一切 ok
    谢谢各位的支持,每人多有分!
      

  14.   

    apache-dbutils,这个怎么执行sql脚本,给我个例子,谢谢。