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

用jsp写数据库操作,简单实现增删改查功能的那些事儿

用jsp写数据库操作,简单实现增删改查功能的那些事儿

这事儿得从头说起,想当年学Java Web开发,JSP(JavaServer Pages)是个绕不过去的坎儿,老师总说,一个动态网站,不会操作数据库就等于不会走路,今天要聊的,就是用JSP这把“老枪”,怎么把数据库的增删改查给整明白,咱不整那些虚头巴脑的理论,就直接上手干。

得有个数据库吧?咱也别搞太复杂,就用最熟悉的MySQL,假设咱要做一个最简单的学生信息管理系统,就管学生的学号、姓名和成绩,先在MySQL里建个数据库叫test_db,里面建张表叫students,就三个字段:id(主键,自增)、name(姓名)、score(成绩),这些准备工作,是后面一切操作的基础。

接下来是重头戏,怎么让JSP和MySQL说上话?这里就得用到一个关键的东西:JDBC(Java Database Connectivity),说白了,它就是Java程序连接各种数据库的“万能钥匙”,根据参考资料《JSP Web技术实验及项目实训教程》里的说法,第一步永远是加载数据库驱动,对于MySQL,就是这句经典代码:Class.forName("com.mysql.jdbc.Driver");,现在新版本的驱动类可能变了,但原理一样,就是告诉JVM:“喂,我要用MySQL的驱动包了,你准备一下。”

驱动加载好了,就该建立连接了,这需要数据库的地址、用户名和密码,地址的写法一般是jdbc:mysql://localhost:3306/test_db,意思是连接本机3306端口上的test_db数据库,然后用DriverManager.getConnection这个方法,把地址、用户名、密码传进去,就能得到一个Connection对象,这个连接对象,就是你通往数据库世界的“大门”,后面的操作都靠它。

大门打开了,怎么往里送命令或者取东西呢?这就需要Statement或者PreparedStatement对象。Statement像是直接喊话,而PreparedStatement更像是用对讲机,更安全、更高效,尤其是涉及到用户输入的时候,能防止“SQL注入”这种黑客攻击,所以咱们一般推荐用PreparedStatement

用jsp写数据库操作,简单实现增删改查功能的那些事儿

好了,工具备齐,开始干增删改查这四件套。

先说“增”(Create),比如页面上有个表单,用户输入了姓名“张三”和成绩“95”,点提交,JSP页面收到请求后,先拿到这两个参数,然后核心代码来了:String sql = "INSERT INTO students(name, score) VALUES(?, ?)"; 这里两个问号是占位符,接着创建PreparedStatement对象,再用ps.setString(1, name)ps.setInt(2, score)把真实的值填进去,执行ps.executeUpdate(),这个方法会返回一个数字,表示影响了多少行数据,大于0就说明插入成功了,这个过程,就像是你把写好的纸条(SQL命令)交给门里面的工作人员去执行。

再说“查”(Read),这是最常用的,比如要列出所有学生信息,SQL语句很简单:SELECT * FROM students,但执行方法不一样,用的是ps.executeQuery(),它会返回一个ResultSet对象,你可以把它想象成数据库返回给你的一张虚拟的表格,然后用while(rs.next())循环遍历每一行,用rs.getInt("id")rs.getString("name")这样的方法,把每个单元格的数据取出来,再拼成HTML的表格行(<tr><td>...</td></tr>)显示在页面上,这就好比是你从门里要了一份花名册,然后一页一页地念出来,抄写到你的本子(网页)上。

用jsp写数据库操作,简单实现增删改查功能的那些事儿

然后是“改”(Update),比如要修改id为1的学生的成绩为100,SQL语句是:UPDATE students SET score = ? WHERE id = ?,同样用PreparedStatement设置两个参数(先成绩,后id),然后执行ps.executeUpdate(),这个方法对于INSERT、UPDATE、DELETE操作都适用,都是返回受影响的行数。

“删”(Delete),这个最简单也最危险,比如要删除id为1的学生:DELETE FROM students WHERE id = ?,设置好id参数,执行executeUpdate(),一定要小心,删错了可就找不回来了,所以通常在实际应用中,删除前会有个确认提示。

干完所有这些操作,有件顶顶重要的事儿千万别忘了,打扫战场”,根据编程的好习惯,就像《JSP动态网站开发案例教程》里强调的,一定要在finally块里,按顺序关闭ResultSetStatement(或PreparedStatement)、Connection这些资源,不然,连接一直开着,多了就会把数据库拖垮,这就是所谓的“数据库连接泄露”。

说到这里,你可能觉得,这不挺简单的嘛?确实,单纯实现功能不难,但这里面有几个坑,是新手最容易掉的,第一个就是把Java代码和HTML标签在JSP里写得乱七八糟,像一锅粥,这就是JSP早期被诟病的“小脚本”问题,维护起来能要命,好的做法是尽量用JSTL标签库来代替Java代码块,第二个坑是没处理异常,数据库操作随时可能出问题(比如连接不上、SQL语法错了),必须用try-catch包起来,给用户个友好提示,第三个坑就是上面说的,忘记关闭连接,导致资源泄露。

用JSP操作数据库实现增删改查,是学习Web开发的基本功,它让你理解了数据是怎么从表单到服务器,再到数据库,然后又怎么回来的整个流程,虽然现在更流行用Servlet和MVC框架(比如Spring MVC)来分离逻辑,把JSP仅仅当作视图来用,但底层这套JDBC的连接、执行SQL、处理结果集的核心思想,是永远不会过时的,先把这最原始、最直接的方式搞懂了,以后再学那些高级框架,才会觉得有根有据,心里踏实。