本篇介绍篇一至篇三中用到的JPA链接SQL Server的具体情况以及实战过程中可能遇到的问题。
具体的下载和安装教程,请参阅;
SQL Server Express是免费的,并且配套的SQL Server Management Studio也是可以用的。
呃,当然,使用Docker来运行SQL Server是另外一条路径。具体请参阅
在Java环境中使用SQL Server,需要安装SQL Server JDBC Driver。
微软将整个JDBC Driver的项目直接开源了:
在其下载页面,可以选择对应的JRE版本,不同的JRE版本会有不同的package。或者在Maven项目中直接加入下列依赖(这里依赖于JRE 11)。
<dependency> <groupId>com.microsoft.sqlserver</groupId> <artifactId>mssql-jdbc</artifactId> <version>10.2.1.jre11</version> <scope>runtime</scope> </dependency>
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文件。
打开MSC文件,即可进行相应的配置。
另外一个精彩碰到的问题是:
A network-related or instance-specific error occurred while establishing a connection to SQL Server
这里需要查看端口的设置是不是正确。SQL Server默认使用端口1433。如下图设置。
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 epositorycommicrosoftsqlservermssql-jdbc10.2.1.jre11
这时,只能去官方去下载Link
然后复制上述DLL到%JAVA_HOME%in下。
随着网络认证的日趋严格,SSL 验证也被设置为标准了。
下述错误就可能遇到了:
The driver could not establish a secure connection to SQL Server by using Secure Sockets Layer (SSL) encryption
行之有效的方法是修改connection string:
spring.data.url=jdbc:sqlserver://localhost;database=classicmodels;integratedSecurity=true;encrypt=true;trustServerCertificate=true;
有了以上这些配置和安装,SQL Server Express(以及别的版本)应该都能正确使用了。
另外常见的两个问题是:
jdbc:sqlserver://[serverName[instanceName][:portNumber]][;property=value[;property=value]]
具体也可以参考上面的实例。