2014-06-19 1 views
0

ibatis 쿼리에서 응용 프로그램 서버 폴더를 읽고 싶습니다. 내가 응용 프로그램 서버 폴더 위치 (예 : opt\sasu\import\abc.import)를 가지고있는 하나의 쿼리 인 iBatis를 프레이밍하고 있음을 알리기 위해 BULK INSERT in SQL SERVER을 수행하려고합니다.이 파일들은 응용 프로그램 서버에 있습니다. ibatis에서 어떻게 쿼리를 작성할 수 있습니까? 아래는 내가ibatis 쿼리에서 응용 프로그램 서버 폴더를 찾는 방법

BULK INSERT TABLENAME FROM ${importFilePath} 
     WITH (   
       FIELDTERMINATOR = '|', 
       FORMATFILE = ${formatFilePath} 
      ); 

importFilePathformatFilePath은 애플리케이션 서버 파일 위치 경로입니다 쓴 쿼리입니다. 이 쿼리는이 파일이 데이터베이스 서버에 있어야한다고 예상합니다. 이 문제를 해결할 수있는 도구가 하나 있습니다.

답변

0

일반적으로이 문제는 응용 프로그램 서버와 데이터베이스 서버에서 액세스 할 수있는 네트워크 공유 폴더를 만들어서 해결합니다. 데이터베이스 서버에서 볼 수있는 폴더의 경로는 구성 매개 변수입니다 (응용 프로그램의 다른 매개 변수를 저장할 때마다 저장하십시오). 유일한 중요한 점은 응용 프로그램 서버가이 경로를 알고 있어야 올바른 쿼리를 생성 할 수 있다는 것입니다.

일반적으로 데이터를 가져 오는 것은 ImportService입니다. 파일을 가져 와서 해당 공유 폴더로 파일을 이동 또는 복사 한 다음 매퍼를 호출해야합니다.

public void import() { 
    copyFileToSharedFolderAccessibleByDatabaseServer(); 
    mapper.importData(); 
} 

mapper 메서드를 호출하기 전에이 서비스는이 구성 매개 변수를 가져와 올바른 경로를 만들어 매퍼로 전달해야합니다. 귀하의 요청에 중 다음과 같이 전체 경로 또는 경로 폴더로 파일 이름 (들)을 전달합니다

interface MyMapper { 
    void importData(@Param("importFilesFolder") String importFileFolder, 
        @Param("importFile") String importFile, 
        @Param("formatFile") String formatFile); 
} 

MyMapper.xml에서 :

BULK INSERT TABLENAME FROM ${imporFilesFolder}\${importFile} 
    WITH (   
      FIELDTERMINATOR = '|', 
      FORMATFILE = ${imporFilesFolder}\${formatFile} 
     ); 
+0

감사 답변을, 우리가하지 않는 애플 리케이션 서버에서 공유 폴더에 액세스 할 수있는 권한, 우리는 다른 솔루션으로 바뀌 었습니다. bcp.We는 클라이언트 컴퓨터에 microft clinet 및 유틸리티 소프트웨어를 설치하고 ProcessBuilder java 클래스를 통해 필요한 매개 변수를 전달했습니다. 제대로 작동합니다. – Renukeswar