本文还有配套的精品资源,点击获取

简介:SQL Server数据库的管理是IT领域的基础技能之一,而掌握其连接方法对于开发者和数据库管理员来说至关重要。本文将详细指导读者通过图形化界面和JDBC进行SQL Server数据库的连接步骤,包括安装和启动SQL Server Management Studio(SSMS),进行数据库引擎连接,以及配置和使用JDBC驱动连接数据库的全过程。

1. SQL Server安装与SSMS启动

安装和配置SQL Server环境是构建数据库交互应用的首要步骤。首先,从Microsoft官网下载SQL Server安装程序,根据提示完成安装向导,选择安装类型、功能以及实例配置。对于大多数开发环境,建议安装默认实例。接着,进行产品密钥的输入和许可条款的同意。在安装过程中,根据需要选择相应组件,例如数据库引擎服务、SSMS以及SQL Server复制等。

安装完成后,启动SQL Server Management Studio (SSMS),它是SQL Server的管理和配置工具。通过SSMS,你可以执行数据库的各种管理任务,包括创建和修改数据库、编写SQL语句、执行查询等。SSMS提供了一个直观的界面,允许用户通过图形化方式管理数据库,简化了数据库维护和开发的复杂性。

SSMS启动后,应进行一系列配置工作,如服务器认证方式的配置、安全性设置、数据备份策略等,确保数据库的安全与高效运行。这些设置对于保证数据库的稳定性和性能至关重要,也是开发者必须掌握的基本技能。通过这一章的学习,你将为进入SQL Server世界打下坚实的基础。

2. 图形化界面连接数据库

2.1 数据库连接前的准备工作

在开始数据库连接之前,确保我们已经做好了充分的准备工作,这将有助于我们更顺利地完成连接过程。

2.1.1 配置SQL Server服务器

确保服务器已安装并正确配置,可以在服务器上执行以下步骤:

登录服务器 :使用管理员账户登录到SQL Server服务器。 打开配置管理器 :在开始菜单中找到SQL Server配置管理器并打开。 配置网络协议 :检查是否启用了TCP/IP协议。若没有启用,可以在相应实例的协议下找到TCP/IP,右键点击选择“属性”,在“协议”选项卡中勾选“启用”选项,并确保下方的“已听闻端口”为默认的1433或你所设置的端口。 重启服务 :更改配置后,需要重启SQL Server服务以使更改生效。

在配置过程中,你需要特别注意端口号的设置,避免与系统中其他应用的端口冲突。

2.1.2 确保网络连接正常

为了能通过图形界面工具连接到SQL Server数据库,网络连接必须畅通。

检查服务器防火墙设置 :确保防火墙允许访问SQL Server所使用的端口(默认是1433),可以在防火墙设置中添加入站规则来允许该端口。 验证网络连通性 :在客户端执行 telnet 命令测试端口连通性,例如在命令行中输入 telnet [服务器地址] [端口号] 。 数据库访问权限 :确保你拥有访问目标数据库的权限,包括登录凭证是否正确。

2.2 使用SSMS连接数据库

接下来,我们将使用SQL Server Management Studio(SSMS)来连接数据库。

2.2.1 登录认证的配置

SSMS提供了多种登录认证方式,如Windows身份验证和SQL Server身份验证。

打开SSMS :启动SQL Server Management Studio,出现登录窗口。 配置认证方式 :在登录窗口中选择认证方式。如果使用SQL Server身份验证,需要提供登录名和密码。 配置连接属性 :点击选项按钮,可以配置其他连接属性,比如要连接的服务器名称,身份验证方式,选择或创建一个新的数据库连接等。

2.2.2 数据库连接的建立

成功配置认证方式后,你需要建立到具体数据库的连接。

选择服务器 :输入或选择要连接的SQL Server实例。 指定数据库 :在连接配置中,指定想要连接的数据库名称。 完成连接 :点击“连接”,SSMS将尝试建立到数据库的连接。 连接测试 :连接成功后,可以通过SQL Server对象资源管理器展开树状结构,查看数据库的详细信息。

使用SSMS建立连接非常直观,但是有些情况下,系统可能由于权限或网络限制而无法连接。遇到这种情况,应当检查身份验证信息是否正确,网络设置是否允许数据库连接,以及SQL Server实例是否正在运行。

确保你对这些步骤了如指掌,因为它们是后续所有数据库操作的基础。在接下来的章节中,我们将介绍如何通过代码方式连接数据库,以及对数据库进行操作。

3. JDBC驱动的下载与安装

3.1 JDBC驱动的获取途径

3.1.1 从官方网站下载

对于Java开发者来说,与数据库打交道是日常工作的一部分,而JDBC(Java Database Connectivity)驱动是连接Java应用程序与数据库之间的桥梁。首先,驱动可以从数据库的官方网站直接下载。以SQL Server为例,我们需要前往Microsoft的官方网站,进入SQL Server的下载中心,选择对应版本的JDBC驱动进行下载。

在下载页面,根据自己的操作系统环境(如Windows, Linux, macOS等)以及需要的JDBC驱动版本进行选择。下载完成后,一般会得到一个压缩文件,解压该文件后,我们将获取到JDBC驱动的jar包和其他可能的配置文件。通常,为了安全和稳定性的考虑,建议下载与数据库版本相匹配的JDBC驱动版本。

3.1.2 从第三方库管理工具获取

除了直接从官方网站下载,我们还可以通过第三方的库管理工具来获取JDBC驱动,如Maven或Gradle。通过这些工具,我们可以将依赖直接添加到项目的构建文件中,从而简化了手动下载和配置的过程。这种方式也有助于管理项目的依赖版本,避免手动下载可能引入的版本不一致问题。

以Maven为例,在项目的 pom.xml 文件中,我们可以添加如下依赖来引入SQL Server的JDBC驱动:

com.microsoft.sqlserver

sqlserver-jdbc

版本号

在添加了依赖之后,Maven将会自动从中央仓库下载对应版本的JDBC驱动到本地仓库,供Java项目使用。

3.2 JDBC驱动的安装过程

3.2.1 驱动安装步骤详解

JDBC驱动的安装实际上并不涉及到传统意义上的软件安装过程,而是将驱动jar包添加到Java项目的类路径(classpath)中。这样做是为了确保Java虚拟机(JVM)能够找到并加载JDBC驱动类。

通常,在开发环境和服务器环境中,通过Maven或Gradle等构建工具,我们可以在构建过程中自动处理jar包的引入和依赖问题。而在没有构建工具的环境中,我们可能需要手动将jar包添加到项目的类路径中,具体操作步骤如下:

将下载好的JDBC驱动jar包复制到项目的lib目录下(如果没有lib目录,则创建一个)。 根据所使用的开发工具或服务器配置,将lib目录添加到项目的类路径中。 如果是使用Eclipse或IntelliJ IDEA等集成开发环境(IDE),通常可以在项目设置中找到“Build Path”或类似的选项,然后添加jar包。 如果是使用命令行编译Java程序,可以通过 -cp 或 -classpath 参数指定类路径,例如: bash java -cp ".;lib/sqlserver-jdbc.jar" com.example.MainClass 这里, . 代表当前目录, lib/sqlserver-jdbc.jar 代表JDBC驱动jar包的路径。

3.2.2 驱动安装后的验证

在添加了JDBC驱动到类路径后,为了验证驱动是否安装成功,我们可以运行一个简单的Java程序来检查。下面是一个简单的示例代码,用于加载JDBC驱动并尝试连接到数据库:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class JDBCDriverTest {

public static void main(String[] args) {

String connectionUrl = "jdbc:sqlserver://<数据库服务器地址>;databaseName=<数据库名称>;user=<用户名>;password=<密码>";

try {

// 加载并注册JDBC驱动

Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");

// 建立连接

Connection conn = DriverManager.getConnection(connectionUrl);

if (conn != null) {

System.out.println("JDBC驱动安装成功,数据库连接建立!");

// 这里可以添加更多的逻辑来验证连接的有效性

conn.close();

} else {

System.out.println("无法建立数据库连接!");

}

} catch (ClassNotFoundException e) {

System.out.println("未找到JDBC驱动类!");

e.printStackTrace();

} catch (SQLException e) {

System.out.println("数据库连接失败!");

e.printStackTrace();

}

}

}

如果代码能够无误运行,并在控制台上输出“JDBC驱动安装成功,数据库连接建立!”,则意味着JDBC驱动已经正确安装并配置。如果遇到错误,需要根据错误信息检查驱动jar包是否正确添加到了类路径,以及连接字符串是否正确配置。

通过本章节的介绍,我们了解了JDBC驱动的获取途径和安装过程。掌握这些知识,能够帮助Java开发者更加高效地与数据库进行交互。下一章,我们将探讨如何在Java代码中配置连接参数,以便于在项目中实现更加灵活和可靠的数据库连接。

4. JDBC代码配置连接参数

4.1 连接字符串的编写

4.1.1 参数详解与配置要点

在编写JDBC代码时,正确配置连接字符串是建立数据库连接的第一步。连接字符串通常遵循以下的格式:

String url = "jdbc:subprotocol:subname";

jdbc :这是JDBC URL的前缀,表示接下来的字符串是一个JDBC连接字符串。 subprotocol :这部分指定了JDBC驱动的名称或者与数据库交互的协议,例如 mysql 、 oracle 、 sqlserver 等。 subname :这部分通常包含了要连接数据库的相关信息,如服务器地址、端口号以及数据库名等。格式根据不同的数据库驱动会有所不同。

以连接SQL Server为例,一个典型的连接字符串可能是这样的:

String url = "jdbc:sqlserver://localhost:1433;databaseName=Northwind";

这里的 localhost 是服务器地址, 1433 是SQL Server默认的TCP端口号,而 Northwind 则是要连接的数据库名。

连接字符串配置的关键要点包括: - 确保URL格式正确,特别是每个参数之间用分号 ; 分隔。 - 根据实际的数据库环境替换 localhost 、端口号和数据库名等参数。 - 对于支持多种连接方式的数据库,如SQL Server可以通过TCP/IP或命名管道连接,需要选择合适的连接方式并配置正确的参数。

4.1.2 常见连接错误及解决

在配置连接字符串时,可能会遇到一些常见的错误,以下是一些常见的问题及其解决方法:

错误1:找不到驱动类

如果程序运行时报告找不到驱动类,首先确保你已经将数据库对应的JDBC驱动jar包添加到了项目的classpath中。

错误2:连接字符串格式错误

错误信息可能会显示连接字符串格式不正确。这时需要检查URL格式,确保所有参数正确无误且符合JDBC驱动的要求。

错误3:认证失败

连接字符串中可能需要包含登录认证信息,如用户名和密码。如果认证失败,需要检查提供的用户名和密码是否正确,同时注意一些数据库对认证信息还有额外的配置要求。

String url = "jdbc:sqlserver://localhost:1433;databaseName=Northwind;user=sa;password=your_password";

错误4:端口号错误

数据库服务可能运行在非默认的端口上,或者服务未正确运行在指定的端口。确认端口号是否正确,并确保数据库服务已启动。

String url = "jdbc:sqlserver://localhost:1434;databaseName=Northwind";

4.2 配置Java项目连接数据库

4.2.1 集成环境下的配置流程

在开发环境中配置数据库连接参数,一般有以下步骤:

下载并安装Java开发环境(例如IntelliJ IDEA、Eclipse等)。 创建或打开一个Java项目。 在项目的构建路径中添加对应数据库的JDBC驱动jar包。 编写连接数据库的代码,包括连接字符串的配置。 使用IDEA或Eclipse的数据库工具验证配置是否正确。

4.2.2 代码中配置连接参数的示例

以下是一个使用 DriverManager.getConnection 方法来获取数据库连接的Java代码示例。它展示了如何在代码中配置连接参数:

import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.SQLException;

public class DatabaseConnection {

public static void main(String[] args) {

String url = "jdbc:sqlserver://localhost:1433;databaseName=Northwind";

String user = "sa";

String password = "your_password";

Connection conn = null;

try {

conn = DriverManager.getConnection(url, user, password);

System.out.println("Connected to the database successfully!");

} catch (SQLException e) {

System.out.println(e.getMessage());

}

finally {

// Always close the connection.

try {

if (conn != null && !conn.isClosed()) {

conn.close();

}

} catch (SQLException e) {

System.out.println(e.getMessage());

}

}

}

}

在这段代码中,我们定义了数据库的连接字符串以及认证信息。使用 DriverManager.getConnection 方法尝试连接数据库,并在成功连接后输出一条消息。无论连接成功与否,代码都尝试关闭数据库连接,以释放资源。

在此示例中,数据库连接字符串为 "jdbc:sqlserver://localhost:1433;databaseName=Northwind" ,使用的是SQL Server数据库的JDBC驱动。 user 和 password 变量分别代表数据库的用户名和密码。代码中还包含异常处理逻辑,用于捕获和输出可能发生的任何 SQLException 异常。

5. 使用Statement和PreparedStatement执行SQL

5.1 Statement的基本使用

5.1.1 创建Statement对象

Statement对象允许我们执行静态SQL语句,并且可以查询和更新数据库。以下代码展示了如何在Java代码中创建一个Statement对象。

Connection con = null;

Statement stmt = null;

try {

con = DriverManager.getConnection("jdbc:sqlserver://localhost:1433;databaseName=YourDB", "username", "password");

stmt = con.createStatement();

// 代码中将用到stmt对象执行SQL语句

} catch (SQLException e) {

// 异常处理逻辑

e.printStackTrace();

} finally {

// 关闭数据库连接,释放资源

}

在上述代码中, DriverManager.getConnection 用于建立到SQL Server数据库的连接,然后通过这个连接对象 con 创建了Statement对象 stmt 。这个Statement对象用于执行SQL语句。

5.1.2 执行SQL语句

执行SQL语句是数据库操作中的核心部分,我们可以使用Statement对象来执行查询(SELECT)语句和更新(INSERT, UPDATE, DELETE)语句。

String sqlQuery = "SELECT * FROM Users";

ResultSet rs = stmt.executeQuery(sqlQuery);

String sqlUpdate = "UPDATE Users SET年薪 = 10000 WHERE 用户ID = 1";

int affectedRows = stmt.executeUpdate(sqlUpdate);

在上述代码中, executeQuery 方法用于执行查询操作并返回一个ResultSet对象,我们可以用它来获取查询结果。 executeUpdate 方法用于执行更新语句,并返回受影响的行数。这种方式对于执行静态SQL语句十分有用,但是它不支持参数化查询,容易遭受SQL注入攻击。

5.2 PreparedStatement的高级特性

5.2.1 预编译SQL的优势

与Statement不同,PreparedStatement对象预编译SQL语句,这意味着SQL语句被SQL Server服务器预处理,并可以重复使用。PreparedStatement支持参数化查询,可以减少SQL注入的风险。

以下代码演示了PreparedStatement对象的创建和使用:

String sql = "SELECT * FROM Users WHERE 用户ID = ?";

PreparedStatement pstmt = con.prepareStatement(sql);

pstmt.setInt(1, 1); // 设置第一个参数为整数类型,并赋值

ResultSet rs = pstmt.executeQuery();

// 更新操作示例

pstmt.setInt(1, 2); // 再次设置参数为新的值

int affectedRows = pstmt.executeUpdate();

在这段代码中,问号(?)在SQL语句中作为参数的占位符。然后使用 setInt 方法设置参数的值。 PreparedStatement 不仅提供了更强的安全性,还可以提高性能,因为预编译的SQL语句可以被数据库重用,而无需每次都进行编译。

5.2.2 参数的设置与SQL注入防护

PreparedStatement通过参数化的方式提供SQL注入防护。参数的值是在执行SQL之前由应用程序设置的,并且由数据库引擎验证和处理。这样,任何参数值都不会被解释为SQL代码的一部分,从而防止了潜在的SQL注入。

String sql = "SELECT * FROM Users WHERE 用户名 = ? AND 密码 = ?";

PreparedStatement pstmt = con.prepareStatement(sql);

// 设置参数,防止SQL注入

pstmt.setString(1, "admin");

pstmt.setString(2, "password123"); // 密码应该是加密后比较,这里仅为示例

ResultSet rs = pstmt.executeQuery();

在上述代码段中,我们通过 setString 方法设置了用户名和密码的参数值。这有效防止了未经验证的输入被解释为SQL代码的风险。

总结起来,通过使用 PreparedStatement 代替 Statement ,我们不仅可以提高应用的安全性,还可以利用其预编译特性提升数据库操作的性能。在现代的Java应用程序中, PreparedStatement 是推荐的执行SQL操作的方式。

6. 结果处理和连接资源管理

在数据库交互中,执行SQL语句并处理结果是一项基础而重要的任务。如何有效地获取查询结果,处理异常,以及如何管理数据库连接资源,直接影响到应用程序的性能和稳定性。本章将详细介绍如何使用 ResultSet 进行结果处理,以及如何管理数据库连接资源的各个方面。

6.1 查询结果的处理

6.1.1 ResultSet的操作方法

ResultSet 是JDBC API中用于处理SQL查询返回的结果集。当通过 Statement 或 PreparedStatement 执行查询操作时,返回的就是 ResultSet 对象。以下是使用 ResultSet 进行查询结果处理的基本方法:

// 假设我们已经创建了PreparedStatement对象stmt,并执行了SQL查询

ResultSet rs = stmt.executeQuery();

// 遍历结果集

while (rs.next()) {

// 获取列值

int id = rs.getInt("id");

String name = rs.getString("name");

Date birthDate = rs.getDate("birth_date");

// 打印获取的数据

System.out.println("ID: " + id + ", Name: " + name + ", Birth Date: " + birthDate);

}

// 关闭ResultSet

rs.close();

rs.next() : 将结果集的光标移动到下一行,并在第一行之前返回 false ,当结果集遍历完成后返回 false 。 rs.getInt() , rs.getString() , rs.getDate() : 分别用于获取不同类型的列值,需要与数据库中列的实际类型相匹配。

6.1.2 数据类型转换与异常处理

在处理 ResultSet 时,正确地处理数据类型转换是非常关键的。如果类型不匹配,会导致 SQLException 。为了避免这种问题,我们应该在获取数据之前先检查列的数据类型,或使用 ResultSet 提供的 wasNull() 方法来检测空值。

// 使用wasNull()方法检查字段是否为null

int id = rs.getInt("id");

if (rs.wasNull()) {

System.out.println("ID is null");

} else {

System.out.println("ID: " + id);

}

异常处理应始终成为数据库操作的一部分。在查询数据库时,可能会遇到网络中断、数据库锁、死锁等多种异常情况。合理地捕获和处理这些异常对于提高应用程序的健壮性和用户体验至关重要。

try {

// 数据库操作代码

} catch (SQLException e) {

// 异常处理逻辑

System.err.println("Database access error: " + e.getMessage());

} catch (Exception e) {

// 其他类型的异常处理

System.err.println("Unexpected error: " + e.getMessage());

}

6.2 连接资源的管理

6.2.1 正确关闭连接的重要性

数据库连接是一种有限的资源。在应用程序中,正确管理这些资源不仅可以提高应用程序性能,还可以防止资源泄露。数据库连接应该在使用完毕后立即关闭,以确保释放底层系统资源。

// 遵循try-with-resources语句,确保资源被正确关闭

try (Connection conn = DriverManager.getConnection(url, user, password);

PreparedStatement stmt = conn.prepareStatement(query)) {

// 执行数据库操作

} catch (SQLException e) {

// 异常处理

}

6.2.2 资源管理的最佳实践

最佳实践建议采用try-with-resources语句来管理数据库资源。这是一种特殊的try语句,可以确保每个资源在语句执行完毕后都被自动关闭。因此,即使在发生异常的情况下,所有的资源也会被自动关闭。

// 使用try-with-resources语句管理Connection和ResultSet

try (Connection conn = DriverManager.getConnection(url, user, password);

PreparedStatement stmt = conn.prepareStatement(query);

ResultSet rs = stmt.executeQuery()) {

// 遍历ResultSet

while (rs.next()) {

// 处理查询结果

}

} catch (SQLException e) {

// 异常处理

System.err.println("Error: " + e.getMessage());

}

try-with-resources语句的引入,极大地方便了资源管理,使得开发者可以更专注于业务逻辑的实现,而不是资源的释放问题。此外,使用资源池,如连接池,来管理数据库连接,是提高数据库操作效率和系统稳定性的另一个重要策略。

// 示例:使用连接池管理数据库连接

// 这里假设使用了一个连接池对象pool来管理连接

try (Connection conn = pool.getConnection();

PreparedStatement stmt = conn.prepareStatement(query)) {

// 执行数据库操作

} catch (SQLException e) {

// 异常处理

}

通过遵循正确的资源管理实践,可以有效避免常见的资源泄露问题,并确保数据库操作的安全性和高效性。

7. 数据库事务管理和优化

7.1 事务的概念与特性

事务是数据库管理系统执行过程中的一个逻辑单位,由一组操作序列组成。事务具有四个基本特性,通常称为ACID属性:原子性(Atomicity)、一致性(Consistency)、隔离性(Isolation)、持久性(Durability)。

原子性 :事务作为一个整体被执行,要么全部完成,要么全部不完成。 一致性 :事务执行的结果必须是使数据库从一个一致性状态转换到另一个一致性状态。 隔离性 :一个事务的执行不能被其他事务干扰,即一个事务内部的操作及使用的数据对并发的其他事务是隔离的。 持久性 :一旦事务提交,则其所做的修改会永久保存在数据库中。

7.2 事务的控制和管理

在SQL Server中,可以通过T-SQL语句来显式控制事务。以下是如何控制事务的几个关键语句:

BEGIN TRANSACTION : 开始一个新事务。 COMMIT : 保存当前事务的更改。 ROLLBACK : 回滚当前事务,撤销自 BEGIN TRANSACTION 以来的所有更改。 SAVE TRANSACTION : 保存事务的一个保存点,可以使用 ROLLBACK TRANSACTION 回滚到某个保存点。

示例代码

BEGIN TRANSACTION

-- 执行一系列操作

-- 如果操作成功

COMMIT TRANSACTION

-- 如果出现错误

ROLLBACK TRANSACTION

7.3 事务的隔离级别

SQL Server提供了四种事务隔离级别,用于控制事务之间的数据可见性:

READ UNCOMMITTED : 读未提交。最低的隔离级别,允许事务读取尚未提交的修改。 READ COMMITTED : 读已提交。默认的隔离级别,避免了脏读,但可能发生不可重复读。 REPEATABLE READ : 可重复读。保证在事务范围内同一查询多次返回相同结果,但可能发生幻读。 SERIALIZABLE : 可串行化。最高的隔离级别,避免脏读、不可重复读和幻读,但性能影响最大。

如何设置事务隔离级别

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

7.4 事务监控与管理的最佳实践

合理设计事务大小 :避免长时间占用资源,减少锁争用。 使用事务日志备份 :定期备份事务日志,有助于快速恢复。 分析事务性能瓶颈 :使用SQL Server Profiler等工具进行监控,分析长时间运行的事务。 避免在事务中执行I/O操作 :如文件读写,会增加事务响应时间。 考虑使用分区事务 :对于非常大的事务,可以考虑使用分区来减少锁定资源。

7.5 SQL Server中的索引优化

索引是数据库中用来快速检索数据的数据结构,对于数据库查询性能的提升至关重要。索引的优化包括:

索引类型

聚集索引(Clustered Index) :决定表中数据的物理排序。 非聚集索引(Nonclustered Index) :存储索引键值和一个指针,指针指向数据所在的磁盘位置。

索引优化技巧

避免过多的索引 :每个索引都会占用额外空间,并可能在插入、删除或更新操作时降低性能。 定期重建和重新组织索引 :有助于维护索引的性能。 创建覆盖索引 :如果查询只需要索引中的列,可以创建覆盖索引以避免数据表本身的查找。 使用索引视图 :对于复杂查询,可以创建索引视图以提高性能。

使用索引优化器

SQL Server提供查询优化器,能够根据查询语句和数据库统计信息,生成最有效的执行计划。

示例代码 - 创建索引

CREATE INDEX IX_Widget_Name ON dbo.Widgets(WidgetName);

通过本章节的介绍,我们已经了解到数据库事务管理的核心概念和操作,以及索引的重要性与优化技巧。在后续章节中,我们将深入探讨数据库的高级特性以及性能调优的方法。

本文还有配套的精品资源,点击获取

简介:SQL Server数据库的管理是IT领域的基础技能之一,而掌握其连接方法对于开发者和数据库管理员来说至关重要。本文将详细指导读者通过图形化界面和JDBC进行SQL Server数据库的连接步骤,包括安装和启动SQL Server Management Studio(SSMS),进行数据库引擎连接,以及配置和使用JDBC驱动连接数据库的全过程。

本文还有配套的精品资源,点击获取