我正在尝试通过bash运行Liquibase更新并遇到连接到数据库的问题(“与主机MYCOMPUTERNAME / SQL的TCP / IP连接,端口1433失败了。”)。 我正在使用的命令就是这个 -
java -jar liquibase.jar --username="USERNAME" --password="PASSWORD" --url=$'jdbc:sqlserver://MYCOMPUTERNAME\SQL;databaseName=DBNAME' update
注意:所有大写字母中的值都不是真实值,而是显示我正在尝试做的事情。
我已将问题缩小到连接字符串 - 特别是实例。我正在使用sqljdbc4.jar连接到数据库。我在默认实例上有一个具有相同名称的数据库,当我运行它时它会起作用 -
java -jar liquibase.jar --username="USERNAME" --password="PASSWORD" --url=$'jdbc:sqlserver://MYCOMPUTERNAME;databaseName=DBNAME' update
我还从Windows命令行而不是bash运行上面的第一个,它可以工作(虽然只有双引号或没有引号,而不是单引号)。所有这些似乎都指向我在bash中的语法问题,而不是实际的连接问题。我试过单引号,双引号和转义反斜杠
编辑:我调试了jar,问题是连接字符串的值正在读入 -
jdbc:sqlserver://MYCOMPUTERNAME/SQL;databaseName=DBNAME
当传递给main方法时,反斜杠正在被切换。
编辑:我发现了这个问题。我正在使用Windows Bash,这是试图改变路径。它看起来像是在它发现两个连续的正斜杠时切换后续的反斜杠。我能够继续使用这个命令 -MSYS_NO_PATHCONV=1 java -jar liquibase.jar --username="USERNAME" --password="PASSWORD" --url=$'jdbc:sqlserver://MYCOMPUTERNAME\SQL;databaseName=DBNAME' update
我在这里找到了这个解决方案 -
How to stop mingw and msys from mangling path names given at the command line?
根本原因全部记录在这里 -