《JSP Web开发基础教程》 期末上机考数据库连接速通!(sqlite) SQLite连接数据库
前言
本来我是录了一个视频 手敲代码 这个链接数据库示例的 但 录完之后我发现 声音有点问题!! 全瑕 !
所以我撰写了此文档。文档的描述相较于视频讲解可能不够详尽,但相关代码均已涵盖。若文档中有表述欠佳之处,还望海涵,后续我会进行修改完善。
一、读题目(依据图片内容明确任务要求)
二、步骤
打开数据库管理工具 创建表和数据库
依照图片中的详细信息创建数据库。(具体操作为:首先新建 sqlite 连接,随后依据表名创建对应的数据库类。)
新建sqlite连接 并按照表名创建数据库类
完成上述数据库相关操作后,打开 eclipse 创建一个 web 项目,并着手编写页面 jsp 以及需要跳转至的结果 jsp 页面。
创建页面和java文件
创建index.jsp页面 (此页面主要构建了一个包含商品 ID、名称和库存输入框的表单,表单提交的目标是 “StockServlet”,提交方式为 post。)
Index page
首页
请输入商品ID:
请输入商品名称:
请输入商品库存:
创建result.jsp页面(该页面用于展示库存操作的结果信息,包括从请求中获取的 message、productID、productName 和 productStock 等信息,并提供了返回 index.jsp 页面的链接。)
库存操作结果
操作结果
${message}
产品ID:${productID}
产品名称:${productName}
产品库存:${productStock}
返回录入页面
接着写我们的数据库连接 封装到DataBase包里面 里面有两个方法 链接数据库和关闭数据库(在 Database 包中的 DatabaseHelper 类实现了数据库连接与关闭的功能。)
package Database;
import java.sql.*;
public class DatabaseHelper {
// 定义SQLite数据库驱动程序的类名。
private static final String DRIVER_CLASS = "org.sqlite.JDBC";
// 定义数据库的URL路径,指向本地磁盘上的SQLite数据库文件。
private static final String DATABASE_URL = "jdbc:sqlite:D:\\product.db";
// 用于保存当前数据库连接的对象,静态声明意味着该连接可以在所有实例间共享。
private static Connection con = null;
/**
* 尝试建立与SQLite数据库的连接。
* @return 返回一个表示数据库连接的对象,如果连接失败则返回null。
*/
public Connection dbcon() {
try {
// 加载指定的JDBC驱动程序。
Class.forName(DRIVER_CLASS);
// 使用DriverManager获取数据库连接。
con = DriverManager.getConnection(DATABASE_URL);
// 返回建立的数据库连接。
return con;
} catch (ClassNotFoundException e) {
// 如果找不到驱动程序类,则打印信息并返回null。
e.printStackTrace();
return null;
} catch (SQLException e) {
// 如果发生SQL异常(如无法建立连接),则打印堆栈跟踪信息并返回null。
e.printStackTrace();
return null;
}
}
/**
* 关闭与数据库的现有连接。
*/
public void closeDB() {
if (con != null) {
try {
// 尝试关闭数据库连接。
con.close();
} catch (SQLException e) {
// 如果关闭连接时发生SQL异常,则打印堆栈跟踪信息。
e.printStackTrace();
}
// 设置连接对象为null,确保资源被正确释放。
con = null;
}
}
}
接着我们建一个servlet包 (在 sevlet 包中的 StockServlet 类用于处理来自 index.jsp 页面的 post 请求。)
package sevlet;
import java.io.IOException;
import java.sql.*;
import Database.DatabaseHelper;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
@WebServlet("/StockServlet")
public class StockServlet extends HttpServlet {
@Override
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
// 从HTTP请求中获取产品ID、名称和库存参数。
String productID = request.getParameter("productID");
String productName = request.getParameter("productName");
String productStock = request.getParameter("productStock");
// 创建DatabaseHelper实例以帮助与数据库交互。
DatabaseHelper dbhelp = new DatabaseHelper();
// 尝试建立数据库连接。
Connection con = dbhelp.dbcon();
PreparedStatement prst = null;
ResultSet rs = null;
// 定义SQL查询语句,用于检查指定的产品ID是否存在于数据库中。
String selectsql = "select * from TblProduct where productID=?";
try {
// 准备并执行SQL查询。
prst = con.prepareStatement(selectsql);
prst.setString(1, productID);
rs = prst.executeQuery();
// 如果找到了对应的产品ID,则更新该产品的信息。
if (rs.next()) {
rs.close(); // 关闭结果集。
// 更新产品的名称和库存。
String updateSql = "update TblProduct set productName=?, productStock=? where productID=?";
prst = con.prepareStatement(updateSql);
prst.setString(1, productName);
prst.setString(2, productStock);
prst.setString(3, productID);
prst.executeUpdate();
// 设置成功消息为“库存更新成功”。
request.setAttribute("message", "库存更新成功");
} else {
// 如果未找到产品ID,则插入新记录。
String insertSql = "insert into TblProduct(productID, productName, productStock) values(?, ?, ?)";
prst = con.prepareStatement(insertSql);
prst.setString(1, productID);
prst.setString(2, productName);
prst.setString(3, productStock);
prst.executeUpdate();
// 设置成功消息为“库存插入成功”。
request.setAttribute("message", "库存插入成功");
}
// 将产品信息设置到请求属性中,以便在JSP页面中使用。
request.setAttribute("productID", productID);
request.setAttribute("productName", productName);
request.setAttribute("productStock", productStock);
} catch (SQLException e) {
// 捕获并打印SQL异常的堆栈跟踪。
e.printStackTrace();
} finally {
// 确保无论发生什么情况,都关闭数据库资源。
try {
if (rs != null) rs.close();
if (prst != null) prst.close();
if (con != null) con.close();
} catch (SQLException e) {
// 捕获并打印关闭资源时发生的SQL异常。
e.printStackTrace();
}
}
// 转发请求和响应到结果页面(result.jsp)。
try {
request.getRequestDispatcher("result.jsp").forward(request, response);
} catch (ServletException | IOException e) {
// 捕获并打印转发请求时发生的异常。
e.printStackTrace();
}
}
}
然后我们运行项目 就成功了!!! 可以进行数据库的增改查!
编写上面代码需要注意的问题(写一下我容易出错的地方)
写数据库帮助类时注意不要打错这两个 特别是下面有前缀jdbc:sqlite开头:
private static final String DRIVER_CLASS = "org.sqlite.JDBC";
private static final String DATABASE_URL = "jdbc:sqlite:D:\\product.db";
try-catch语句可以由ecilpse提示补充 可以不用手打
务必记得导入 sqlite 驱动包,否则将无法正常连接和操作 SQLite 数据库。
总结
本文主要是使用JSP+servlet对SQLite数据库进行操作 可以拿这个进行练手 当然这个有很多种方法写 这只是其中一种
下面我提供一个使用实体类mvc的视频 使用的是mysql数据库 可以看一下 我和实验室的朋友一起弄得两个版本
友情链接(bilibili)速通JavaWeb MySQL+MVC版