不好意思,问一个也许很简单的问题?

qingren 2004-01-06 10:58:03
我需要用java调用sqlplus执行一段orale语句。
1,我用insert_oracle.bat文件执行没有问题。
@echo off
sqlplus bidemo/abc@gaad @insert_oracle.sql
2,我用运行命令没有问题。
sqlplus bidemo/abc@gaad @%BIConf%insert_oracle.sql
但是,我用java调用出现问题:
1,String[] arg={"bidemo/abc@gaad", "@%Conf%insert_oracle.sql"};
Process sub = Runtime.getRuntime().exec("sqlplus",arg);
sub.waitFor(); //这句使程序死掉
sub.destroy();
2,改成
cmd="@%Conf%insert_oracle.bat"
Process sub = Runtime.getRuntime().exec(cmd);
同上一样
如果不要sub.waitFor();没有任何运行结果

insert_oracle.sql内容:
insert into title values('miss');
insert into education values('miss');
exit ;

3,我把insert_oracle.bat改成
@echo off
rem sqlplus bidemo/abc@gaad @insert_oracle.sql
没有问题
但是一加上pause语句,就死掉

看来是cmd需要用户处理的时候,用sub.waitFor();就处于死锁状态。
请问,有什么办法解决这个问题:
在java里如何调用sqlplus?


...全文
96 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qingren 2004-01-07
  • 打赏
  • 举报
回复
可能我没说清楚,在具体的做法上,这些都是解决途径。
我想通过程序包装一些批处理,让最终用户比较好操作,而这些命令是可以被二次开发修改的
甚至不是oracle语句,而是其他数据库的。
谢谢大家!
其实,根本问题是我的java代码不能直接调用非win界面程序。
我试了一下,就是调用cmd.exe,程序会死掉.
因为cmd窗口出不来,也就无法终止,而waitfor使它死锁.
我用的是win2000server,jb9
LGQDUCKY 2004-01-07
  • 打赏
  • 举报
回复
作成存储过程调用是一样的道理:

create procedure test
as
str varchar2(200);
begin
str:='CREATE TABLE accounts( accs_key varchar(16) NOT NULL, accs_code varchar(16) NOT NULL, accs_name varchar(30) NOT NULL)';
execute immediate str ;
end;
qingren 2004-01-07
  • 打赏
  • 举报
回复
比如这样的内容:
--创建数据库 gabidemo--
--disconnect gabidemo;
drop user gabidemo cascade;
-- Create the user
create user gabidemo
identified by gold
default tablespace USERS
temporary tablespace TEMP
profile DEFAULT;
-- Grant/Revoke role privileges
grant aq_administrator_role to gabidemo;
grant aq_user_role to gabidemo;
grant dba to gabidemo;

connect gabidemo/gold@gaad;
--模式为 admin --
--创建表 accounts --
CREATE TABLE accounts( accs_key varchar(16) NOT NULL, accs_code varchar(16) NOT NULL, accs_name varchar(30) NOT NULL);

与连接有关,程序处理比较麻烦。尽管也是一种方法。
qingren 2004-01-07
  • 打赏
  • 举报
回复
LGQDUCKY(飘) :
这样要自己去解析sql文件,我认为比sqlplus慢一些。
bluewin99 2004-01-06
  • 打赏
  • 举报
回复
就是啊,想不明白,楼主的意图
LGQDUCKY 2004-01-06
  • 打赏
  • 举报
回复
为什么使用SQLPLUS呢?直接使用ADO连接上数据库,在运行不可以吗?
skystar99047 2004-01-06
  • 打赏
  • 举报
回复
up

17,377

社区成员

发帖
与我相关
我的任务
社区描述
Oracle 基础和管理
社区管理员
  • 基础和管理社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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