我想从ibatis查询中读取应用程序服务器文件夹。我想做一个BULK INSERT in SQL SERVER
,我正在iBatis中构建一个查询,它具有应用程序服务器文件夹位置(例如:optsasuimportabc.import
)这些文件存在于应用程序服务器中。如何用ibatis编写查询?下面是我写的查询
BULK INSERT TABLENAME FROM ${importFilePath}
WITH (
FIELDTERMINATOR = '|',
FORMATFILE = ${formatFilePath}
);
importFilePath
和formatFilePath
为应用服务器文件存放路径。该查询期望该文件应该存在于数据库服务器中。有没有人能解决这个问题?
通常这个问题是通过创建一些可以从应用服务器和数据库服务器访问的网络共享文件夹来解决的。数据库服务器看到的文件夹路径是一个配置参数(将其存储在应用程序中存储其他参数的任何位置)。唯一重要的是应用服务器应该知道这个路径,这样它才能构造正确的查询。
通常你有一些ImportService
负责导入数据。它应该获取文件并将文件移动或复制到共享文件夹,然后调用mapper。
public void import() {
copyFileToSharedFolderAccessibleByDatabaseServer();
mapper.importData();
}
在调用mapper方法之前,此服务应该获取此配置参数并构造正确的路径并将其传递给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}
);