ubuntu系统中运行java程序调用oracle 的sqlplus,有点挑战性

测试逍遥子 2009-09-18 05:32:57
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
...全文
163 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
flamehazy 2010-09-16
  • 打赏
  • 举报
回复
apache-dbutils,这个怎么执行sql脚本,给我个例子,谢谢。
c4313848 2009-09-19
  • 打赏
  • 举报
回复
要是实在不行,
绕个圈子就是了,

JAVA,调用SHELL,SHELL再调用SQLPLUS
测试逍遥子 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 pengjiangchun 的回复:]
引用 5 楼 inthirties 的回复:
你java执行的用户是oracle么,如果不是oracle是没有运行权限的。




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




请问该怎么用呢,那些东西多没有用过,不知道怎么用,我现在的作用是需要调用
/home/oracle/database.sql文件在oracle的wishcms用户下建表,database.sql
里面全多是建表的语句!
inthirties 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 inthirties 的回复:]
引用 5 楼 inthirties 的回复:
你java执行的用户是oracle么,如果不是oracle是没有运行权限的。




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

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

用Runtime.exec的方式不好。
测试逍遥子 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 inthirties 的回复:]
你java执行的用户是oracle么,如果不是oracle是没有运行权限的。



[/Quote]

我的linux只登陆了一个oracle用户,就是怕程序调用其他用户的终端!
所以不能怀疑肯定是oracle用户,而且也没有权限方面的问题我的oracle
tomcat多是安装在oracle用户下!
测试逍遥子 2009-09-19
  • 打赏
  • 举报
回复
一个解决方法就是 用JAVA获取ORACLE_HOME的值,
$ORACLE_HOME/bin/sqlplus .........




这个我也已经试过了,程序还是把它当作是$ORACLE_HOME/bin,不会认为是oracle的安装路径!
测试逍遥子 2009-09-19
  • 打赏
  • 举报
回复
SQLPLUS 全路径试试
例如:/u/app/oracle/product/10.2.0/db_1/bin/sqlplus aaa ............

用全路径确实可以,(上面我已经说了一次了)可是不可能要求客户把oracle建在固定的目录下把
这个不现实!
测试逍遥子 2009-09-19
  • 打赏
  • 举报
回复
阿 哈哈哈,终于搞定了
在这里分享一下:

原来是我的oracle的安装路径的文件所有者的问题
因为我安装在自己建的目录下面,默认的是属于root
用户的,后来我把文件改成oracle的,果然一切 ok
谢谢各位的支持,

每人多有分!
测试逍遥子 2009-09-19
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 c4313848 的回复:]
要是实在不行,
绕个圈子就是了,

JAVA,调用SHELL,SHELL再调用SQLPLUS
[/Quote]

请问该怎么调用,可以举个例子吗?
谢谢
inthirties 2009-09-18
  • 打赏
  • 举报
回复
[Quote=引用 5 楼 inthirties 的回复:]
你java执行的用户是oracle么,如果不是oracle是没有运行权限的。



[/Quote]

java执行sql文件,可以使用一些java写的开源包呀,比如dbutil
inthirties 2009-09-18
  • 打赏
  • 举报
回复
你java执行的用户是oracle么,如果不是oracle是没有运行权限的。


c4313848 2009-09-18
  • 打赏
  • 举报
回复
一个解决方法就是 用JAVA获取ORACLE_HOME的值,
$ORACLE_HOME/bin/sqlplus .........
c4313848 2009-09-18
  • 打赏
  • 举报
回复
不好意思,没看清楚,

我觉得应该是环境变量的问题
JAVA 程序不会自动去读取LINUX的 PROFILE文件,。。。。个人猜测
c4313848 2009-09-18
  • 打赏
  • 举报
回复
SQLPLUS 全路径试试
例如:/u/app/oracle/product/10.2.0/db_1/bin/sqlplus aaa ............
测试逍遥子 2009-09-18
  • 打赏
  • 举报
回复
我估计是我oracle什么地方的配置有点问题,但是网上多没有看到这方面的资料,没办法,只有来请教各位了!

3,496

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 高级技术相关讨论专区
社区管理员
  • 高级技术社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧