2010-03-02 53 views
1

我想用Java編寫一個程序,它使用osql來生成服務器上的數據庫列表。我的代碼如下:osql -S沒有給我預期的結果

public Object[] findDataBases(String server, String user, String passwd){ 
    str = new String[] {"cmd.exe", "/c", "osql", " -S ", 
      server, " -U", user, "&&", "-P ", passwd, 
          "&&", "sp_databases","&&", "GO"  
      }; 
    Runtime rt = Runtime.getRuntime(); 
    try{ 

     Process p = rt.exec(str); 
     InputStream is = p.getInputStream(); 
     InputStream err = p.getErrorStream(); 
     InputStreamReader in = new InputStreamReader(is); 
     InputStreamReader er = new InputStreamReader(err); 

     BufferedReader buff = new BufferedReader(in); 
     String line = buff.readLine(); 
     ArrayList<String> listDatabases = new ArrayList<String>(); 
     while (line != null){ 
      listDatabases.add(line.trim()); 
      /*for (int i = 0; i<4; i++){ 
       buff.readLine(); 
      }*/ 
      line =buff.readLine(); 
     } 
     System.out.println("error stream:"); 
     buff = new BufferedReader(er); 

     while ((line=buff.readLine()) != null){ 
      System.err.println(line); 
     } 

     databases = listDatabases.toArray(); 
     return databases; 
    } 

當我運行此,出於某種原因,我得到我彷彿運行osql -?的消息,我顯然還沒有完成。

我不知道我在做什麼錯,所以任何幫助,將不勝感激。非常感謝!

+0

你可以包括你正在發佈的完整的osql命令(str)嗎?也許它不是按照你的意圖建造的。 – 2010-03-02 15:54:00

+0

我認爲它在那裏 - 「str = new String [] {」cmd.exe「,」/ c「,」osql「,」-S「, 服務器,」-U「,用戶,」&&「,」 -P「,passwd, 」&&「,」sp_databases「,」&&「,」GO「 };' 當我從cmd提示符執行時,它是: 'osql -S serverName -U userName -P password ' – chama 2010-03-02 16:02:03

+0

但是如何將所有這些連接在一起成爲最終命令? '&&是什麼? – 2010-03-02 16:27:17

回答

1

刪除空格從參數採取& &關: 海峽=新的String [] { 「cmd.exe的」, 「/ C」, 「OSQL」, 「-S」,服務器, 「-U」,用戶,「-P」,passwd,「-Q」,「sp_databases」};

+0

我剛剛嘗試了這一點,並且出現以下錯誤:[SQL Native Client]命名管道提供程序:無法打開與SQL 服務器[67]的連接。 [SQL Native Client]登錄超時已過期 [SQL Native Client]與服務器建立連接到 時發生錯誤。當連接到SQL Server 2005時,此故障可能由 造成,在默認設置下,SQL Server不允許遠程連接。 – chama 2010-03-02 16:14:49

+0

這意味着命令行現在可以正常執行,但是連接到SQL服務器時出現問題。 如果您在命令提示符下運行它時在這裏發佈完整的命令行會很有幫助。 也可以在提示中首先嚐試一下,並確保它完成這項工作。 – Moisei 2010-03-02 16:25:38

+0

它在命令提示符下執行 - 我試過了。我認爲在我使用你的代碼後,問題出在我的服務器上。或者我在我的變量中拼錯了服務器的名稱,或者它的實例存在問題(\\而不是/在java字符串中?)。我改變了之後,它工作。非常感謝你的幫助。 – chama 2010-03-02 16:31:26