基于前一篇《JDBC Driver to SQL Server Express》,已经可以尝试使用SQL Server Express了。
SQLServerDriver VS DriverManager VS DataSource
Based on Working with a connection in SQL Server documentation:
Connect SQL Server Express via DriverManager,
Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
String connectionUrl = "jdbc:sqlserver://localhost;database=AdventureWorks;integratedSecurity=true;"
Connection con = DriverManager.getConnection(connectionUrl);
Connect SQL Server Express via SQLServerDriver,
Driver d = (Driver) Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver").newInstance();
String connectionUrl = "jdbc:sqlserver://localhost;database=AdventureWorks;integratedSecurity=true;"
Connection con = d.connect(connectionUrl, new Properties());
Connect SQL Server Express via SQLServerDataSource:
SQLServerDataSource ds = new SQLServerDataSource();
ds.setUser("MyUserName");
ds.setPassword("*****");
ds.setServerName("localhost");
ds.setPortNumber(1433);
ds.setDatabaseName("AdventureWorks");
Connection con = ds.getConnection();
除了使用Name/Password之外,还可以使用Integrated Security来登陆(注意,需要额外配置才能正常工作,查阅下面内容):
ds.setIntegratedSecurity(true);
ds.setServerName("STUDYPC_201603\\SQLEXPRESS");
ds.setDatabaseName(jdbcDatabase);
TCP/IP
SQL Server的JDBC Driver需要TCP/IP。
基于Trouble Shooting,TCP/IP必须配置。
The Microsoft JDBC Driver for SQL Server requires that TCP/IP be installed and running to communicate with your SQL Server database. You can use the SQL Server Configuration Manager to verify which network library protocols are installed.
打开TCP/IP,需要SQL Server Configuration Manager。
而基于文档,新的SQL Server Configuration Manager并没有额外的程序,而是提供了一系列的MSC文件。
Version | Path |
---|---|
SQL Server 2019 | C:\Windows\SysWOW64\SQLServerManager15.msc |
SQL Server 2017 | C:\Windows\SysWOW64\SQLServerManager14.msc |
SQL Server 2016 | C:\Windows\SysWOW64\SQLServerManager13.msc |
SQL Server 2014 (12.x) | C:\Windows\SysWOW64\SQLServerManager12.msc |
SQL Server 2012 (11.x) | C:\Windows\SysWOW64\SQLServerManager11.msc |
打开MSC文件,即可进行相应的配置。
Integrated Security
SQL Server的Logon可以基于Windows是认证。这时不需要输入用户名和密码。这个在开发环境还是相当好用的,不需要额外配置开发环境的用户名和密码,更不需要将这些信息存储下来(如app.properties等等)。因为这些信息上传git的时候很麻烦。
然而,直接设置Integrated Security并不能正常工作。根本原因是JDK的路径下找不到mssql-jdbc-auth-xxx.dll(xxx是版本号)。
如果SQL Server Driver是Maven下安装的,那么上述DLL并不存在。换言之,上述DLL并不属于JAR的一部分。打开Maven的Repository目录并没有DLL:
.m2\repository\com\microsoft\sqlserver\mssql-jdbc\8.4.1.jre11
这时,只能去官方去下载Link
然后复制上述DLL到JAVA_HOME\bin下。
SSL
随着网络认证的日趋严格,SSL 验证也被设置为标准了。
下述错误就可能遇到了:
The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption
行之有效的方法是修改connection string:
String connectionUrl = "jdbc:sqlserver://localhost;database=classicmodels;integratedSecurity=true;encrypt=true;trustServerCertificate=true";
示例Repo
示例Repo见:https://github.com/alvachien/learning-notes/tree/master/spring-tutorial/fifth-example