java中调用 sqlplus执行sql脚本

时间:2022-05-17 11:32:55
求一句   java中调用 sqlplus执行sql脚本  的语句格式!

感激不尽!

11 个解决方案

#1


帮LZ顶一下,java不是很熟

#2


System.runtime.exec('sqlplus @script.sql');

#3


括号里面我是这样写的,怎么不可以 ! sqlplus test/test@orcl @C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\setup/data/oracle/database.sql

在sqlplus中单独执行sqlplus test/test@orcl可以通过

然后执行@D:\sql\database.sql;也可以通过,

但是把@D:\sql\database.sql;改成@C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\setup/data/oracle/database.sql就不可以了是怎么回事?


路径是正确的!

#4


这是通过java执行cmd的方式
Runtime.getRuntime().exec("sqlplus username/pwd@tnsname @你的sql的脚本文件") 需要sqlplus环境,和正确的tnsname配置,如果是远程的话,这里基本和命令行的方式一样了。

还有通过纯的java方式的
可以使用dbutils的工具包,这是apache提供的一个java包。
里面可以通过api的方式直接执行脚本,还可以从execl文件导入数据,等高级功能。

#5


所路径中的空格去掉试试

#6


inthirties
 
(Inthirties) 

可以说清楚一点吗?什么配置?

我是按你那样写的可是程序直接挂起不跑了!

#7


Process proc = rt.exec(cmd);
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;

System.out.println("----------------");
while ((line = br.readLine()) != null){
System.out.println(br.readLine());
}
System.out.println("到这里了!");


System.out.println("到这里了!");就没有执行了

#8


现在cmd是这样写的

    cmd="sqlplus test/test@orcl @d://sql//database.sql";
    
 
    Runtime rt=Runtime.getRuntime();

   rt.exec(cmd);


InputStream stderr = proc.getErrorStream(); 
InputStreamReader isr = new InputStreamReader(stderr); 
BufferedReader br = new BufferedReader(isr); 
String line = null; 

System.out.println("----------------"); 
while ((line = br.readLine()) != null){ 
System.out.println(br.readLine()); 

System.out.println("到这里了!"); 


程序到这里:System.out.println("到这里了!");的前面就挂起了,进程被锁,请问有什么方法解决??

#9


你怎么没有catch语句啊,加上去,看看到底发生了什么

#10


问题更新:

      我按网上的开启了两个线程可是在这里还是被挂起exitVal = proc.waitFor();

不知道是为什么!请高手指点!

代码:

cmd= "cmd.exe /c sqlplus "+user2+"/"+pwd2+"@orcl @"+fPath;
//cmd= "cmd.exe /c "+"start d:\\sql\\database.sql"; 

System.out.println("cmd="+cmd);
Process proc = rt.exec(cmd);

StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(),"Error");
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(),"Output");  
                      
errorGobbler.start();
outputGobbler.start();

System.out.println("----------------");

exitVal = proc.waitFor();

System.out.println(exitVal+"到这里你就成功了!");

执行到这里还被挂起:proc.waitFor();

#11


我想知道isqlplus里怎么调用脚本!

#1


帮LZ顶一下,java不是很熟

#2


System.runtime.exec('sqlplus @script.sql');

#3


括号里面我是这样写的,怎么不可以 ! sqlplus test/test@orcl @C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\setup/data/oracle/database.sql

在sqlplus中单独执行sqlplus test/test@orcl可以通过

然后执行@D:\sql\database.sql;也可以通过,

但是把@D:\sql\database.sql;改成@C:\Program Files\Apache Software Foundation\Tomcat 6.0\webapps\ROOT\setup/data/oracle/database.sql就不可以了是怎么回事?


路径是正确的!

#4


这是通过java执行cmd的方式
Runtime.getRuntime().exec("sqlplus username/pwd@tnsname @你的sql的脚本文件") 需要sqlplus环境,和正确的tnsname配置,如果是远程的话,这里基本和命令行的方式一样了。

还有通过纯的java方式的
可以使用dbutils的工具包,这是apache提供的一个java包。
里面可以通过api的方式直接执行脚本,还可以从execl文件导入数据,等高级功能。

#5


所路径中的空格去掉试试

#6


inthirties
 
(Inthirties) 

可以说清楚一点吗?什么配置?

我是按你那样写的可是程序直接挂起不跑了!

#7


Process proc = rt.exec(cmd);
InputStream stderr = proc.getErrorStream();
InputStreamReader isr = new InputStreamReader(stderr);
BufferedReader br = new BufferedReader(isr);
String line = null;

System.out.println("----------------");
while ((line = br.readLine()) != null){
System.out.println(br.readLine());
}
System.out.println("到这里了!");


System.out.println("到这里了!");就没有执行了

#8


现在cmd是这样写的

    cmd="sqlplus test/test@orcl @d://sql//database.sql";
    
 
    Runtime rt=Runtime.getRuntime();

   rt.exec(cmd);


InputStream stderr = proc.getErrorStream(); 
InputStreamReader isr = new InputStreamReader(stderr); 
BufferedReader br = new BufferedReader(isr); 
String line = null; 

System.out.println("----------------"); 
while ((line = br.readLine()) != null){ 
System.out.println(br.readLine()); 

System.out.println("到这里了!"); 


程序到这里:System.out.println("到这里了!");的前面就挂起了,进程被锁,请问有什么方法解决??

#9


你怎么没有catch语句啊,加上去,看看到底发生了什么

#10


问题更新:

      我按网上的开启了两个线程可是在这里还是被挂起exitVal = proc.waitFor();

不知道是为什么!请高手指点!

代码:

cmd= "cmd.exe /c sqlplus "+user2+"/"+pwd2+"@orcl @"+fPath;
//cmd= "cmd.exe /c "+"start d:\\sql\\database.sql"; 

System.out.println("cmd="+cmd);
Process proc = rt.exec(cmd);

StreamGobbler errorGobbler = new StreamGobbler(proc.getErrorStream(),"Error");
StreamGobbler outputGobbler = new StreamGobbler(proc.getInputStream(),"Output");  
                      
errorGobbler.start();
outputGobbler.start();

System.out.println("----------------");

exitVal = proc.waitFor();

System.out.println(exitVal+"到这里你就成功了!");

执行到这里还被挂起:proc.waitFor();

#11


我想知道isqlplus里怎么调用脚本!