使用 JDBC 访问 Microsoft SQL Server

Access Microsoft SQL Server via JDBC

Posted by lzzmm on October 12, 2021
About 5 minutes to read

DCS281 - Database System Principle

本文章记录了使用 Java 访问 Microsoft SQL Server 的过程。

环境

  • Windows 21H1 19043.1288
  • Java version 1.8.0_121
  • Java(TM) SE Runtime Environment (build 1.8.0_121-b13)
  • Java HotSpot(TM) Client VM (build 25.121-b13, mixed mode)
  • Microsoft JDBC Driver 9.4 for SQL Server
  • Microsoft SQL Server 2019

配置 JDBC 环境

  1. 由于先前电脑上已经有Java运行环境,于是参考教程配置JDBC环境。主要是下载驱动,然后配环境变量调整路径什么的。我的Java是32位的,一直用的64位动态链接库用不上,最后整了很久换成32位的动态链接库就好了。

  2. 设置SQL Server的身份验证方式,开启SQL Server的 混合安全验证 使用sa登陆。

  3. 配置JDBC连接

    1. 打开 SQL Server配置管理器
    2. 打开 SQL Server网络配置 –> MSSQLSERVER的协议 –> TCP/IP
    3. 找到IP地址127.0.0.1 的一项,设置TCP端口1433 并开启
    4. 找到IPALL项,设置TCP端口1433,保存
    5. 保存后,开启 Named PipesTCP/IP
  4. 连接到 Microsoft SQL Server

    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    
     import java.sql.*;
    
     public class PrintAllTables {
         public static void main(String[] args) {
             String JDriver = "com.microsoft.sqlserver.jdbc.SQLServerDriver";
             String connectDB = "jdbc:sqlserver://127.0.0.1:1433;DatabaseName=JY;integratedSecurity=true;";
    
             try {
                 Class.forName(JDriver);
             } catch (ClassNotFoundException e) {
                 e.printStackTrace();
                 System.exit(0);
             }
    
             try {
                 String user = "sa";
                 String password = "******";
                 Connection con = DriverManager.getConnection(connectDB,user,password); // Connect to SQL Server
                 Statement cmd = con.createStatement(); // Create SQL command object
                    
                 ... // SQL command injection
                        
                 cmd.close(); // Close command object connection
                 con.close(); // Close database object connection
             } catch(SQLException e){
                 e.printStackTrace();
                 System.exit(0);
             }
         }
     }
    

读取图书借阅数据库系统JY的图书表book

0
1
2
3
4
ResultSet rs = cmd.executeQuery("SELECT * FROM BOOK");
System.out.printf("book_id\t\tbook_name\t\t\tbook_isbn\tbook_author\tbook_price\tinterview_times\tbook_publisher\n");
while (rs.next()) {
    System.out.println(rs.getString("book_id")+"\t"+rs.getString("book_name")+"\t"+rs.getString("book_isbn")+"\t"+rs.getString("book_author")+"\t"+rs.getString("book_price")+"\t"+rs.getString("interview_times")+"\t"+rs.getString("book_publisher"));
}

jdbc1

遇到的问题

  1. java.lang.ClassNotFoundException: com.microsoft.sqlserver.jdbc.SQLServerDriver

    这是没有成功注入驱动。可能是没有正确设置jre包的路径。

  2. com.microsoft.sqlserver.jdbc.SQLServerException: 没有为集成身份验证配置驱动程序。

    这是由于jre包的一个动态链接库没链接上。

Reference

microsoft-jdbc-driver-for-sql-server

在 Java 中如何使用 JDBC 连接 SQL Server 数据库

通过JDBC连接SQL Server

Creative Commons License本作品采用知识共享署名-非商业性使用-相同方式共享 4.0 国际许可协议进行许可。
This work is licensed under a Creative Commons Attribution-NonCommercial-ShareAlike 4.0 International License.