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
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
例如:/u/app/oracle/product/10.2.0/db_1/bin/sqlplus aaa ............
JAVA 程序不会自动去读取LINUX的 PROFILE文件,。个人猜测
$ORACLE_HOME/bin/sqlplus .........
java执行sql文件,可以使用一些java写的开源包呀,比如dbutil
例如:/u/app/oracle/product/10.2.0/db_1/bin/sqlplus aaa ............
用全路径确实可以,(上面我已经说了一次了)可是不可能要求客户把oracle建在固定的目录下把
这个不现实!
$ORACLE_HOME/bin/sqlplus .........
这个我也已经试过了,程序还是把它当作是$ORACLE_HOME/bin,不会认为是oracle的安装路径!
我的linux只登陆了一个oracle用户,就是怕程序调用其他用户的终端!
所以不能怀疑肯定是oracle用户,而且也没有权限方面的问题我的oracle
tomcat多是安装在oracle用户下!
执行sql脚本,不应该用sqlplus调用的方式,应该用java调用jdbc的方式,有很多的开源包都做的很好了比如apache-dbutils.用Runtime.exec的方式不好。
/home/oracle/database.sql文件在oracle的wishcms用户下建表,database.sql
里面全多是建表的语句!
绕个圈子就是了,JAVA,调用SHELL,SHELL再调用SQLPLUS
在这里分享一下:原来是我的oracle的安装路径的文件所有者的问题
因为我安装在自己建的目录下面,默认的是属于root
用户的,后来我把文件改成oracle的,果然一切 ok
谢谢各位的支持,每人多有分!