基于Java与SQL Server的简易图书管理系统开发指南
本文详解如何利用Java与JDBC技术连接SQL Server数据库,实现图书信息的增删改查。通过具体的代码示例,展示从建立连接到执行CRUD操作的完整流程,并提供安全的资源释放方案,适合初学者快速构建基础数据应用。
系统目标与架构概述
本教程旨在指导用户通过Java控制台程序实现对图书数据的直接管理。系统将支持以下核心业务逻辑:
- 浏览:获取并输出数据库中所有图书信息。
- 查找:支持按编号、书名或作者筛选特定图书。
- 新增:向Book表中插入新的图书记录。
- 借阅/归还:更新库存数量(num字段),借书减一,还书加一。
- 删除:根据ID移除指定图书记录。
环境与准备工作
第1步:搭建开发环境
准备以下工具与依赖即可开始编码:
- IDE:IntelliJ IDEA 或 Eclipse。
- JDK版本:JDK 13 或以上版本。
- 数据库:SQL Server 2019+。
- 驱动包:Microsoft JDBC Driver for SQL Server (例如 8.2.2 版本)。
在IDE中新建Java项目,并将下载的JDBC驱动JAR包添加至项目的库引用中。若使用Maven,需在pom.xml中添加对应依赖。
第2步:配置数据库结构
在SQL Server中创建名为 library 的数据库,并在其中建立 Book 表。建议结构如下:
CREATE TABLE Book (
id INT PRIMARY KEY,
name NVARCHAR(50),
aut NVARCHAR(50),
num INT
);
确保SQL Server允许混合模式登录,并使用账号 sa 和密码 123456 进行测试连接。实际生产中请修改默认密码以保障安全。
核心功能实现
第1步:建立数据库连接
使用JDBC URL连接字符串配置基础连接参数。虽然代码中演示了动态注册驱动的方式,但在JDK 6+环境中,驱动程序通常会自动加载,不过保留显式注册可作为兼容性练习。
String dbURL = "jdbc:sqlserver://localhost:1433;DatabaseName=Library"; String Name = "sa"; String Paw = "123456"; // 注:实际项目中建议使用try-with-resources自动关闭连接 DriverManager.registerDriver(new com.microsoft.sqlserver.jdbc.SQLServerDriver()); Connection conn = DriverManager.getConnection(dbURL, Name, Paw);
第2步:实现全量浏览功能
通过 Statement 执行 SELECT 语句,并使用 ResultSet 遍历结果集打印图书详情。
try {
Statement st = conn.createStatement();
String sql = "SELECT * FROM Book";
ResultSet rs = st.executeQuery(sql);
while (rs.next()) {
int id = rs.getInt("id");
String name = rs.getString("name");
String aut = rs.getString("aut");
int num = rs.getInt("num");
System.out.println(String.format("ID:%d | 名称:%s | 作者:%s | 库存:%d", id, name, aut, num));
}
} catch (SQLException e) {
e.printStackTrace();
} finally {
// 必须执行资源释放
JDBCUtil.release(conn, st, rs);
}第3步:构建查找逻辑
提供菜单选项让用户选择查找方式。注意:拼接SQL时存在注入风险,此处仅用于教学演示,生产环境务必使用 PreparedStatement。
int choice = sc.nextInt();
String sql1 = "";
if (choice == 1) {
System.out.println("请输入书籍编号:");
int bookNum = sc.nextInt();
sql1 = "SELECT * FROM Book WHERE id=" + bookNum;
} else if (choice == 2) {
System.out.println("请输入书籍名称:");
String bName = sc.next();
sql1 = "SELECT * FROM Book WHERE name='" + bName + "'";
} else if (choice == 3) {
System.out.println("请输入书籍作者:");
String author = sc.next();
// 修正原文逻辑错误:原稿误用id列匹配作者,应改为aut列
sql1 = "SELECT * FROM Book WHERE aut='" + author + "'";
}
if (!sql1.isEmpty()) {
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery(sql1);
// 遍历并处理结果...
JDBCUtil.release(conn, st, rs);
}第4步:新增图书记录
接收用户输入的四个字段值,构造 INSERT 语句执行更新操作。
System.out.println("请按顺序输入:编号、书名、作者、数量");
int id = sc.nextInt();
String name = sc.next();
String aut = sc.next();
int num = sc.nextInt();
String insertSql = "INSERT INTO Book VALUES (" + id + ", '" + name + "', '" + aut + "', " + num + ")";
Statement st = conn.createStatement();
st.executeUpdate(insertSql);第5步:借出与归还操作
借出逻辑:先查询当前库存,确认大于0后,将数量减一并更新数据库。
int bookId = ...; // 获取待借书的ID
Statement st = conn.createStatement();
ResultSet rs = st.executeQuery("SELECT num FROM Book WHERE id = " + bookId);
if(rs.next()) {
int currentNum = rs.getInt("num");
if (currentNum > 0) {
st.executeUpdate("UPDATE Book SET num = " + (currentNum - 1) + " WHERE id = " + bookId);
System.out.println("借书成功");
} else {
System.out.println("库存不足");
}
}
JDBCUtil.release(conn, st, rs);归还逻辑:同理,查询后将库存数量加1。
第6步:安全释放资源
为了避免内存泄漏和数据库连接耗尽,每次操作结束后都应在 finally 块中释放资源。封装工具类 JDBCUtil.java 供统一调用:
public static void release(Connection conn, Statement st, ResultSet rs) {
closeRs(rs);
closeSt(st);
closeConn(conn);
}
public static void release(Connection conn, Statement st) {
closeSt(st);
closeConn(conn);
}
private static void closeRs(ResultSet rs) { /* 关闭逻辑 */ }
private static void closeSt(Statement st) { /* 关闭逻辑 */ }
private static void closeConn(Connection conn) { /* 关闭逻辑 */ }运行效果验证
完成上述代码编写并正确配置数据库连接后,可在IDEA中运行主程序。初始状态下,SQL Server中的 Book 表数据应如截图所示:
在控制台中输入浏览指令,Java程序会读取数据并格式化打印:
依次测试查找、借书等操作,界面响应应符合逻辑预期:
最后验证归还及删除功能,确保数据库内数据状态同步更新:
总结与优化建议
以上便是利用 Java 连接 SQL Server 数据库建立简易图书管理系统的完整步骤。该示例涵盖了基本的 JDBC 操作流程。优化提示:在实际项目开发中,强烈建议将原始 SQL 拼接替换为 PreparedStatement 以防止 SQL 注入,并引入 DAO 层设计模式以分离业务逻辑与数据库访问代码。
以上就是利用java和sqlserver建立简易图书管理系统的详细内容,更多关于java和sqlserver图书管理系统资料请关注本站其它相关文章!
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













