是不是写 JSP 页面时想存数据到数据库,结果连连接都搞不定?试了好几次要么报 “ClassNotFoundException”,要么数据库连不上?新手学 JSP 最头疼的就是这一步了,明明语法都懂,一到数据库连接就卡壳。今天兔子哥就把自己踩过的坑、总结的经验全分享出来,从准备工作到代码示例,一步一步教你搞定 JSP 连接 MySQL,看完保准你少走弯路!
先说说为啥 JSP 要连数据库。你想啊,做个用户登录功能,用户名密码总得存在地方吧;搞个商品展示页面,商品信息总不能写死在代码里吧?数据库就是用来存这些数据的,JSP 负责显示,数据库负责存,两者连起来才能做动态网站。之前有个朋友学 JSP,页面做得花里胡哨,就是不会连数据库,结果项目只能看看静态效果,根本没法用,多可惜。
准备工作:这些工具和文件得备齐
连数据库前先把 “家伙事儿” 备齐,少一样都可能出问题:
| 必备物品 | 推荐版本 | 作用 | 新手容易搞错的点 |
|---|---|---|---|
| MySQL 数据库 | 8.0 版本 | 存数据的 “仓库” | 安装时没记密码,后期登录不了 |
| JDBC 驱动 jar 包 | mysql-connector-java-8.0.30 | 让 JSP 和 MySQL “说话” 的桥梁 | 版本和 MySQL 不匹配,8.0 用老驱动会报错 |
| 开发工具 | Eclipse/IDEA | 写代码的工具 | 没把 jar 包加到项目里 |
| 数据库可视化工具 | Navicat/MySQL Workbench | 方便建表、看数据 | 连接时端口号填错(默认 3306) |
兔子哥当初第一次连数据库时,就因为 jar 包版本不对,MySQL 用 8.0 却下了 5.1 的驱动,报了一堆奇怪的错,后来换了对应版本才好。记住啊,MySQL 8.0 以上就得用 8.x 版本的驱动,别图省事随便下一个。还有 jar 包的位置,得放在项目的 WebContent/WEB-INF/lib 文件夹里,放错地方项目找不到,肯定报 “类找不到” 的错。
第一步:先建个数据库和表,数据有地方存
总不能连个空数据库吧?先动手建个简单的用户表练手。
打开你的数据库工具,新建一个数据库,名字叫 “jspdemo”,然后执行这段 SQL 建表:
sql
CREATE DATABASE jspdemo;USE jspdemo;CREATE TABLE user (id INT PRIMARY KEY AUTO_INCREMENT,username VARCHAR(20) NOT NULL,password VARCHAR(20) NOT NULL);-- 插两条测试数据INSERT INTO user (username, password) VALUES ('test1', '123456');INSERT INTO user (username, password) VALUES ('test2', '654321');建表时注意字段名别写错,username 和 password 都是字符串类型,长度设 20 足够用。新手常犯的错是忘了加 “USE jspdemo”,结果表建到别的数据库里去了,后面查数据当然查不到。建完表记得用 “SELECT * FROM user;” 看看数据有没有插进去,确认没问题再往下走。
第二步:写 JSP 代码连接数据库,核心步骤详解
重点来了,这部分代码得仔细看,每一步都有讲究。
先新建一个 JSP 文件,名叫 “dbTest.jsp”,代码分五步走:
- 加载驱动:告诉程序用哪个驱动连接 MySQL,MySQL 8.0 的驱动类是 “com.mysql.cj.jdbc.Driver”,别写成老版本的 “com.mysql.jdbc.Driver”,不然会警告。
- 创建连接:用 DriverManager.getConnection () 获取连接,URL 格式得记牢:“jdbc:mysql://localhost:3306/jspdemo?useSSL=false&serverTimezone=Asia/Shanghai”,这里的 “jspdemo” 是数据库名,serverTimezone 必须加,不然会报时区错误。
- 执行 SQL:用 Statement 或 PreparedStatement 执行查询,这里先简单点用 Statement 查 user 表的所有数据。
- 处理结果:用 ResultSet 接收查询结果,循环输出到页面上。
- 关闭资源:用完的 ResultSet、Statement、Connection 一定要关掉,不然会占资源,数据库连接数有限,不关的话多试几次就连不上了。
完整代码示例放这了,关键地方都标了注释:
jsp
<%@ page import="java.sql.*" %>数据库连接测试
<%Connection conn = null;Statement stmt = null;ResultSet rs = null;try {// 1.加载驱动Class.forName("com.mysql.cj.jdbc.Driver");// 2.创建连接(替换成你的数据库密码)String url = "jdbc:mysql://localhost:3306/jspdemo?useSSL=false&serverTimezone=Asia/Shanghai";String user = "root";String password = "你的数据库密码";conn = DriverManager.getConnection(url, user, password);// 3.执行查询stmt = conn.createStatement();String sql = "SELECT * FROM user";rs = stmt.executeQuery(sql);// 4.输出结果out.println("");out.println("ID 用户名 密码 ");while(rs.next()){int id = rs.getInt("id");String username = rs.getString("username");String pwd = rs.getString("password");out.println(""+id+" "+username+" "+pwd+" ");}out.println("
");} catch (Exception e) {// 打印错误信息,方便排查e.printStackTrace();out.println("连接失败:" + e.getMessage());} finally {// 5.关闭资源,顺序别搞反try { if(rs!=null) rs.close(); } catch(Exception e){}try { if(stmt!=null) stmt.close(); } catch(Exception e){}try { if(conn!=null) conn.close(); } catch(Exception e){}}%>把代码里的 “你的数据库密码” 换成你自己的 MySQL 密码,然后启动 Tomcat 访问这个 JSP,能看到用户表数据就说明成功了!
常见错误解析:连不上数据库?多半是这几个原因
是不是按步骤来还是报错?别慌,看看你是不是中了这几个 “坑”:
- ClassNotFoundException:十有八九是 jar 包没放对位置,或者驱动类名写错了,检查 lib 文件夹里有没有 jar 包,类名是不是 “com.mysql.cj.jdbc.Driver”。
- 连接被拒绝:可能 MySQL 没启动,或者 URL 里的端口号不对,默认 3306,要是你安装时改了端口就得写改过的。
- 时区错误:URL 里没加 serverTimezone=Asia/Shanghai,MySQL 8.0 必须指定时区,加上就好。
- 密码错误:连接时的 password 参数和你 MySQL 的 root 密码对不上,忘了密码就去重置一下,别硬试。
兔子哥当初就因为 MySQL 没启动,对着代码查了半小时,后来才发现服务没开,现在每次连接前都先看看任务管理器里 MySQL 服务是不是在运行,省了不少事。
最后说点掏心窝子的建议。别把所有代码都堆在 JSP 里,实际开发中会把数据库连接的代码单独放一个工具类,JSP 只负责显示,这样改密码、换数据库时不用到处找代码。还有啊,关闭资源的代码一定要写在 finally 里,就算中间报错了也能保证资源被关掉。多试几次,每次报错都记下来,下次遇到就知道怎么解决了。数据库连接是 JSP 开发的基础,这步搞定了,后面做登录、注册、商品展示都顺理成章,加油,你离能做完整项目又近了一步!
标签: mysql-connector-java-8.0.30 ClassNotFoundException
版权声明:除非特别标注,否则均为本站原创文章,转载时请以链接形式注明文章出处。
还木有评论哦,快来抢沙发吧~