public Process exec(String command[])可以用这个方法啊

解决方案 »

  1.   

    在进入SQLPLUS后,在不退出SQLPLUS的情形下,也可以如下运行DOS命令:
    SQL〉host dir
    希望对楼住有帮助
      

  2.   

    用 sqlplus 调用 一个用sql语句编写的文本,你可以找找!
    是:sqlplus d:\oracle\creatDB.sql 这样的!
    具体的参见:sqlplus 的参数,手头没有oracle服务器,自己测试吧!
      

  3.   

    另外,SQLPLUS的connect 命令可以在SQLPLUS命令运行的时候同时进行.
    在SQLPLUS命令后加上参数。例如:user/psd@db
      

  4.   

    将你的多条DOS命令写到run.bat文件中,
    然后再用用Runtime.getRuntime().exec()。
      

  5.   


    另外,SQLPLUS的connect 命令可以在SQLPLUS命令运行的时候同时进行.
    在SQLPLUS命令后加上参数。例如:sqlplus user/psd@db.在windows下
    执行 liuquanyi(大狗)
    是:sqlplus d:\oracle\creatDB.sql 这样的!
    ->是:sqlplus @d:\oracle\creatDB.sql
      

  6.   

    谢谢楼上各位的帮助和建议,恩,看来还是利用java来调用oracle 命令,e.g. sqlplus,srvmgrl 来执行*.sql的脚本来实现比较合适,不过这样的话,可能要在系统中要多加入许多*.sql文件了。本来以为可以通过java来把在DOS控制台执行命令的过程模拟出来的。不过用*.sql脚本也有好处,至少感觉java代码应该要少掉一点。有什么好的建议,大家可以一起交流交流,感谢!
      

  7.   

    >> chenchen2003(晨辰) ( )
    呵呵,好久不用oracle了◎!谢谢,所以要楼主测试!以前常用这种方式测试!
    希望楼主尽快搞定!
      

  8.   

    >>rower203(华仔)你的方法可以吗?
    我记得当时调试oracle的时候不行,java的Runtime.getRuntime().exec()如何调用?
    恐怕还是要调用oracle的工具吧!
      

  9.   

    to liuquanyi(大狗):谢谢,我想rower203(华仔)的意思可能是:把所有执行的命令(oradim,sqlplus etc)都放到一个bat文件里,然后在再Runtime.getRuntime().exec()执行这个bat文件就可以了,这样也是可以的,创建数据库的话,肯定要用oracle的命令啦,java是实现不了的。但是不知道java(oracle OCI driver)能不能执行create database dbname maxdatafiles 254....语句呢,等一下试验一下。
      

  10.   

    就像这样 test.batset ORACLE_SID=test
    c:\oracle\ora90\bin\oradim -new  -sid TEST -startmode m  -pfile c:\oracle\ora90\database\inittest.ora
    c:\oracle\ora90\bin\oradim -edit  -sid TEST -startmode a 
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\CreateDB.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\CreateDBFiles.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\CreateDBCatalog.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\JServer.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\ordinst.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\interMedia.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\context.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\ordinst.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\spatial.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\ultraSearch.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\cwmlite.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\demoSchemas.sql
    c:\oracle\ora90\bin\sqlplus /nolog @c:\oracle\admin\test\scripts\postDBCreation.sql
      

  11.   

    然后用Runtime.getRuntime().exec()执行这个test.bat就好了
      

  12.   

    另一种方法:
    用Runtime.getRuntime().exec()启动程序后,调用返回的Process对象的getOutputStream()方法得到连接到子进程的标准输入流的OutputStream管道流,然后用这个流初始化一个PrintWriter,然后依次把要执行的内部命令用println()写道流之中,每行写完flash()。
    用这种方法可以模拟从命令行启动程序然后输入内部命令的过程。
      

  13.   

    to: stonbing1980(逆境求生):然后用Runtime.getRuntime().exec()执行这个test.bat就好了这个方法可以么?我曾经用这个方法执行bat,但他只执行其中的第一条命令就返回了,一直找不到原因,请指点!
      

  14.   

    to 楼上 :把你代码贴出来吧,我这边没问题的啊。
    String command = "cmd.exe /c C:\\oracle\\admin\\test\\scripts\\test.bat";
            
            Process process = Runtime.getRuntime().exec(command);
            
            BufferedReader output = new BufferedReader(new InputStreamReader(process.getInputStream()));
            
            while(output.readLine() != null)
            {
                System.out.println(output.readLine());
            }        process.destroy();   
    test.bat 是用oracle Database Configuration Assistant自动生成的一系列脚本,然后test.bat会有命令去掉用执行这些脚本,没问题的。很有可能,你的bat在执行第二步的时候出错了,猜测而已。希望对你有点帮助。
      

  15.   

    public class Demo{
      public static void main(String args[]){
      Runtime rn=Runtime.getRuntime();
      Process p=null;
      try{
         p=rn.exec("Demo.bat");
         }catch(Exception e){
         System.out.println("Error exec notepad");
         }
      }
    }.bat:
    gcc t.cpp
    a.exe>out.txt也试过用java执行exe文件,然后用exe去执行bat文件,但是结果同样只执行一条。
      

  16.   

    to gtlang78() :谢谢,我来试试看。
      

  17.   

    谢谢楼上,搞定了,终于知道问题的所在了,是没有将命令都放在buffer中,所以之取到了第一条命令
      

  18.   

    to gtlang78() :你的方法是可行的,谢谢,可是现在又有新的问题了,现在要求是用Java JDBC 去执行sql语句,增加sql脚本文件,用来保存sql语句模板,用java代码修改后再通过JDBC执行,
    例如:
    1. sqlplus : startup nomount pfile="c:\oracle\admin\test\scripts\init.ora"
    2. sqlplus : connect /as sysdba
    3. Java JDBC: create database test maxdatafiles 224 ...这样怎么处理啊,混合着用了,不知道他们是怎么想的,有什么高招阿?
      

  19.   

    整合就是创造!
    呵呵!
    》》3. Java JDBC: create database test maxdatafiles 224 ...建立一个new file("./liuquanyi.sql") and write;
    然后继续执行sqlplus @./liuquanyi.sql