当前位置:首页 > 问答 > 正文

用JDBC驱动连接MS SQL数据库那些事儿,mssql-jdbc怎么搞的

根据微软官方GitHub仓库mssql-jdbc的文档和常见的Java开发实践,用JDBC连接MS SQL Server数据库,说白了就是让Java程序能和远处的SQL Server数据库“搭上话”,这事儿不复杂,但有几个关键点必须得弄清楚,不然就连接不上。

最最基础的就是你得拿到那个能“通话”的“设备”,也就是JDBC驱动jar包,现在一般都推荐使用Microsoft官方的“Microsoft JDBC Driver for SQL Server”,也就是我们说的mssql-jdbc,你可以直接从微软的官方网站或者它的Maven中央仓库里下载,如果你用的是Maven或者Gradle这类项目管理工具,那就更简单了,直接在配置文件里加一行依赖声明,工具就会自动帮你把jar包下载好并引入到项目里,比如在Maven的pom.xml文件里,你可能会看到类似<dependency><groupId>com.microsoft.sqlserver</groupId><artifactId>mssql-jdbc</artifactId><version>12.4.1.jre11</version></dependency>,这就说明已经把最新版本的驱动引入进来了,这里要注意的是,驱动版本最好和你的Java运行环境以及SQL Server的版本匹配,不然可能会出问题。

有了驱动包,接下来就是要知道怎么“拨号”了,在JDBC里,“拨号”的步骤是通过DriverManager.getConnection这个方法完成的,电话号码”是什么呢?就是连接字符串,这个字符串特别重要,它告诉JDBC驱动你要连接的是哪台机器上的哪个数据库,以及用什么账号密码登录,一个最基本的连接字符串长这样:jdbc:sqlserver://localhost:1433;databaseName=你的数据库名;user=你的用户名;password=你的密码,我们来拆解一下这个字符串:jdbc:sqlserver://这是固定的,表明用的是微软的SQL Server协议,后面的localhost指的是数据库服务器的地址,如果数据库不在你本机,就得换成服务器的IP地址或者域名。1433是SQL Server默认的监听端口,如果管理员改了端口,这里也得跟着改。databaseName就是你具体要操作的那个数据库的名字,最后面的userpassword就是登录凭证了。

用JDBC驱动连接MS SQL数据库那些事儿,mssql-jdbc怎么搞的

在实际写代码的时候,为了安全和灵活,我们通常不会把连接字符串、用户名和密码这些敏感信息直接硬编码在代码里,更好的做法是把它放到一个配置文件里,比如一个.properties文件,然后在程序启动的时候去读取,这样以后数据库密码改了或者服务器地址变了,你就不用去翻代码重新编译,直接改配置文件就行了。

建立连接的代码本身很简单,通常就几行,大概的步骤是:虽然新版本的JDBC通常会自动加载驱动,但为了保险起见,有时还是会用Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver")来显式地加载一下驱动类,就是调用DriverManager.getConnection(url, user, password)或者直接传入一个包含了用户名和密码的连接字符串,如果连接成功,这个方法会返回一个Connection对象,这个对象就是你和管理数据库对话的“通道”了。

用JDBC驱动连接MS SQL数据库那些事儿,mssql-jdbc怎么搞的

拿到Connection对象之后,你就可以开始干活了,你可以用createStatement()方法创建一个Statement对象,然后用它的executeQuery方法执行一个SELECT查询,返回的结果是一个ResultSet对象,你可以像遍历集合一样从这个结果集里一行一行地取出数据,如果是执行插入、更新或者删除操作,则用executeUpdate方法,它会返回一个数字告诉你这次操作影响了多少行数据。

这里有个非常重要的注意事项,来源于无数程序员的血泪教训:用完的这些资源,比如ResultSetStatementConnection,一定要记得关闭!不关闭的话,它们会一直占用着数据库的连接和资源,如果这样的操作多了,数据库可能会因为连接数耗尽而崩溃,一定要在finally代码块里确保关闭它们,或者更现代化的做法是使用Java 7引入的try-with-resources语句,它能自动帮你关闭资源,既方便又安全。

可能会遇到一些常见的连接失败问题,错误提示可能是“连接超时”或者“无法连接到服务器”,这时候你得一步步排查:检查一下数据库服务器地址和端口写对了没有,你的电脑能不能ping通那台服务器,检查用户名和密码对不对,是不是有权限访问那个数据库,还有,有时候可能是防火墙把1433端口给挡住了,需要联系网络管理员放行,如果用的是高版本驱动连接老版本数据库,可能还需要在连接字符串里加上encrypt=true;trustServerCertificate=true这样的参数来处理加密连接的问题。

用mssql-jdbc连接SQL Server就是一个准备驱动、拼写正确的连接字符串、获取连接、执行操作最后妥善关闭连接的过程,只要这几个环节没出错,你的Java程序就能和SQL Server顺利“对话”了。