2010-03-02 2 views
1

osql을 사용하여 서버에 데이터베이스 목록을 생성하는 Java 프로그램을 작성하려고합니다.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 -? 실행 한 것처럼 메시지를 얻을 다음과 같이 내 코드입니다.

제가 잘못하고있는 것이 확실하지 않으므로 도움을 얻을 수 있습니다. 정말 고마워! STR = 새로운 String [] { "cmd.exe를", "/"C "OSQL", "-S"서버 "-U"사용자 : 인수 오프 & &을으로부터

+0

발급 할 전체 osql 명령 (str)을 포함시킬 수 있습니까? 아마도 당신이 의도 한대로 건설되지 않을 수도 있습니다. –

+0

str = new String [] { "cmd.exe", "/ c", "osql", "-S", 서버, "-U", 사용자, "&&", " "}" "cmd 프롬프트에서 할 때 다음과 같습니다 : 'osql -S serverName -U userName -P password ' – chama

+0

하지만 어떻게 모두 연결되어 최종 명령이 되는가? '&&'와 함께 무엇입니까? –

답변

1

공백을 제거 , "-P", passwd, "-Q", "sp_databases"};

+0

방금이 시도한 및 다음 오류 : [SQL 네이티브 클라이언트] 명명 된 파이프 공급자 : SQL 서버 [67] 연결을 열 수 없습니다. [SQL Native Client] 로그인 시간 초과가 만료 됨 [SQL Native Client] 서버에 에 대한 연결을 설정하는 동안 오류가 발생했습니다. SQL Server 2005에 연결할 때이 오류는 이라는 기본 설정으로 인해 SQL Server에서 원격 연결을 허용하지 않기 때문에 발생할 수 있습니다. – chama

+0

이것은 현재 명령 행이 제대로 실행되었음을 의미하지만 SQL 서버에 연결하는 데 문제가 있음을 나타냅니다. 명령 프롬프트에서 전체 명령 줄을 실행하면 여기에 전체 명령 줄을 게시하면 많은 도움이됩니다. 또한 프롬프트에서 먼저 시도하고 작업을 수행하는지 확인하십시오. – Moisei

+0

명령 프롬프트에서이 작업을 수행합니다. 나는 당신의 코드를 사용한 후에 나의 서버에 문제가 있다고 생각한다. 어느 것이 든 내 변수에서 서버의 이름을 잘못 입력했거나 인스턴스의 문제 (Java 문자열에서/대신 \\)가있었습니다. 내가 바꾼 후에도 효과가있었습니다. 도와 줘서 고마워. – chama

관련 문제