【发布时间】:2016-09-19 21:30:40
【问题描述】:
我尝试执行以下代码来导出数据(myFileName.csv):
bcp "select * from DataBase.schema.TABLE_NAME" queryout tableData.csv -c -t, , -S [server] -U [user] -P '[password(with special characters)]' > LogFile.txt
以上代码在终端中运行良好。
相比之下,我使用 java 尝试了相同的代码。
File dir = new File("Mydirectory");
Path dataPath = Paths.get("tableData.csv");
List<String> val = new ArrayList();
val.add("bcp");
val.add("\"select * from " + [Database] + ".[Schema]." + table_name + "\"");
val.add("queryout");
val.add(dataPath.toString());
val.add("-c");
val.add("-t");
val.add(",");
val.add("-S");
val.add([server]);// ex: if Server is 10.0.0.1 then val.add("10.0.0.1");
val.add("-U");
val.add([user]); // ex: if User_name is TestA then val.add("TestA");
val.add("-P");
val.add([password(with special characters)]); // ex: if Password is !@#MyPassword*& then val.add("!@#MyPassword*&");
ProcessBuilder builder = new ProcessBuilder(val);
File logFile = new File("LogFile.txt");
System.out.println("BCP command :" + builder.command());
builder.redirectlogFile(logFile);
builder.directory(dir);
Process exec = builder.start();
System.out.println("BCP process completed : with errors :" + exec.waitFor());
System.out.println("BCP logFile :" + org.apache.commons.io.FileUtils.readFileToString(logFile));
我收到以下错误:
BCP 命令 :[bcp, "select * from DataBase.schema.TABLE_NAME", 查询输出,tableData.csv,-c,-t,,,-S,10.0.0.1,-U,TestA,-P, !@#MyPassword*&]
BCP 流程已完成:出现错误:1
BCP 日志文件:开始复制... SQLState = S1000,NativeError = 0 错误 = [Microsoft][SQL Server Native Client 11.0]无法解析列级排序规则
SQLState = 37000,NativeError = 102 错误 = [Microsoft][SQL Server Native Client 11.0][SQL Server]'select * from 附近的语法不正确 数据库.schema.TABLE_NAME'。
通过查看错误,我检查了Server、Database 和Table 的排序规则似乎都相似SQL_Latin1_General_CP1_CI_AS
系统规格:
Linux :
uname -mrs
Linux 3.10.0-327.10.1.el7.x86_64 x86_64
uname -a
Linux [domain] 3.10.0-327.10.1.el7.x86_64 #1 SMP Tue Feb 16 17:03:50 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux
cat /etc/redhat-release
CentOS Linux release 7.2.1511 (Core)
ODBC Driver for linux:
isql --version
unixODBC 2.3.0
odbcinst -q -d -n "SQL Server Native Client 11.0"
[SQL Server Native Client 11.0]
Description=Microsoft SQL Server ODBC Driver V1.0 for Linux
Driver=/opt/microsoft/sqlncli/lib64/libsqlncli-11.0.so.1790.0
任何人都可以帮助我我在这里做错了什么。
【问题讨论】:
-
你用windows机器试过了吗?
-
@ali786 - 是的,我在 Windows 中尝试过,它运行良好。同样在这里,我没有在
BCP和MSSQL之间使用任何ORM。 -
ProcessBuilder在每个数组条目之间插入一个逗号,导致逗号过多和您看到的语法错误。更改您的代码以删除多余的逗号。尝试使用StringBuilder构建命令字符串。 -
@quest4truth array 或 arraylist 的元素之间的逗号是因为 'toString()' 方法。这些逗号不会作为“Process Builder”中的命令执行。
标签: java sql sql-server linux bcp