Документы Microsoft - создание URL-адреса подключения
Экранирование значений в URL-адресе подключения
Возможно, вам придется экранировать определенные частизначений URL соединения из-за включения специальных символов, таких как пробелы, точки с запятой и кавычки.Драйвер JDBC поддерживает экранирование этих символов, если они заключены в фигурные скобки.Например, {;} экранирует точку с запятой.
Экранированные значения могут содержать специальные символы (особенно '=', ';', '[]' и пробел), но не может содержать фигурные скобки ,Значения, которые должны быть экранированы и содержать фигурные скобки, должны быть добавлены в коллекцию свойств.
Поэтому измените пароль или сохраните имя пользователя / пароль как отдельные переменные и добавьте его в Connection.
String dbURL = "jdbc:sqlserver://localhost\\sqlexpress";
String user = "sa";
String pass = "secret";
conn = DriverManager.getConnection(dbURL, user, pass);
Здесь вы найдете имена правильных имен, если хотите использовать коллекцию свойств:
Документы Microsoft - настройка свойств соединения
java2s - создание соединения со свойствами имеет хороший пример для java.Это для MySQL Server, но вам нужно только изменить имена свойств.(со страницы выше)
tl; dr Погружение в источнике
SourceCode - DriverManager.java
использование .getConnection(String url, String user, String password)
создаст запись Properties
.
@CallerSensitive
public static Connection getConnection(String url,
String user, String password) throws SQLException {
java.util.Properties info = new java.util.Properties();
if (user != null) {
info.put("user", user);
}
if (password != null) {
info.put("password", password);
}
return (getConnection(url, info, Reflection.getCallerClass()));
}
Код mssql-jdbc
MSSQL-JDBC - SQLServerDriver.java
public java.sql.Connection connect(String Url, Properties suppliedProperties)
использует:
// Merge connectProperties (from URL) and supplied properties from user.
Properties connectProperties = parseAndMergeProperties(Url, suppliedProperties);
для получения (дополнительных) свойств из данного соединенияUrl:
private Properties parseAndMergeProperties(String Url, Properties suppliedProperties)
использует:
Properties connectProperties = Util.parseUrl(Url, drLogger);
И в MSSQL- Util.java является нарушителем.
if (ch == ';') {...}
case inEscapedValueStart:
if (ch == '}') {...}
case inEscapedValueEnd:
if (ch == ';') {...}
Только способ обойти этот Case-switch и перейти прямо к «SQLServerConnection.java», это доставить правильную коллекцию свойств !
MSSQL-JDBC - SQLServerConnection.java
Функция Connection connect(Properties propsIn, SQLServerPooledConnection pooledConnection)
соответственно Connection connectInternal(Properties propsIn, SQLServerPooledConnection pooledConnection)
:
sPropKey = SQLServerDriverStringProperty.PASSWORD.toString();
sPropValue = activeConnectionProperties.getProperty(sPropKey);
if (sPropValue == null) {
sPropValue = SQLServerDriverStringProperty.PASSWORD.getDefaultValue();
activeConnectionProperties.setProperty(sPropKey, sPropValue);
}