JavaWeb开发系列(九)idea配置jdbc

idea配置jdbc

下载驱动

官网地址

配置jdbc

下面演示的时候用的是mysql-connector-java-5.1.38.jar。实际更推荐用8.x以上的版本比如如mysql-connector-j-8.4.0.jar,不过mysql-connector-java-5.1.38.jar依然能用。在project structure中选择libraries然后选择添加java

选择提前下载好的驱动

配置进Libraries

配置进Modules

配置进Artifact

可以看到项目库里面已经有对应的jar包添加进来

到这里我们的idea已经配置好了jdbc相关环境

测试

由于我们测试的时候是要和数据库打交道所以这里我们需要再数据库中新建表并添加数据

新建数据库

首先新建数据库jspdb

新建表

新建表users

可以在右边的红框中输入下面的sql语句建表users

bash 复制代码
-- 创建 users 表
CREATE TABLE IF NOT EXISTS users (
    id INT PRIMARY KEY AUTO_INCREMENT,
    name VARCHAR(50) NOT NULL,
    number VARCHAR(20) NOT NULL,
    email VARCHAR(100),
    created_at TIMESTAMP DEFAULT CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;

添加数据

输入下面的sql语句

bash 复制代码
-- 插入测试数据
INSERT INTO users (name, number, email) VALUES
('张三', '13800138001', 'zhangsan@example.com'),
('李四', '13900139002', 'lisi@example.com'),
('王五', '13700137003', 'wangwu@example.com'),
('赵六', '13600136004', 'zhaoliu@example.com'),
('孙七', '13500135005', 'sunqi@example.com'),
('测试用户', '15888888888', 'test@example.com');

或者直接在cmd中输入上述代码也可以

最后数据表的数据如下

导出数据库

点击右键选择转储SQL然后点击结构和数据,会生成对应的.sql文件

导入数据库

点击右键选择运行SQL文件

选择需要导入的.sql文件即可

编写第一个测试页面

创建jdbc.jsp

代码如下

java 复制代码
<%@ page import="java.sql.Connection" %>
<%@ page import="java.sql.DriverManager" %>
<%@ page import="java.sql.PreparedStatement" %>
<%@ page import="java.sql.ResultSet" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
<%
  String name = request.getParameter("username");
  if(name!= null && !name.isEmpty()){
    // 8.x版本
    Class.forName("com.mysql.cj.jdbc.Driver");
    // 5.x版本
    // Class.forName("com.mysql.jdbc.Driver");
    // 8.x版本
    Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb","root","123456");
    // 5.x版本
    // Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8","root","123456");
    String sql = "select * from users where name =?";
    PreparedStatement ps = conn.prepareStatement(sql);
    ps.setString(1,name);
    ResultSet rs = ps.executeQuery();
    while (rs.next()){
      out.println(rs.getString("name")+rs.getString("number"));
    }
    ps.close();
    conn.close();

  }

%>

<form action="jdbc.jsp">
  <input type="text" name="username" required placeholder="请输入用户名" /><br>
  <input type="submit" value="提交">

</form>

</body>
</html>

其中如果是用5.x的驱动需要将useSSL设为false比如Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb?useSSL=false&useUnicode=true&characterEncoding=UTF-8","root","123456");。因为5.x并不支持像8.x的安全协议。否则可能会报错

bash 复制代码
类型 异常报告

消息 在 [15] 行处理 [/jdbc.jsp] 时发生异常

描述 服务器遇到一个意外的情况,阻止它完成请求。

例外情况

org.apache.jasper.JasperException: 在 [15] 行处理 [/jdbc.jsp] 时发生异常

12:   String name = request.getParameter("username");
13:   if(name!= null && !name.isEmpty()){
14:     Class.forName("com.mysql.jdbc.Driver");
15:     Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/jspdb","root","123456");
16:     String sql = "select * from users where name =?";
17:     PreparedStatement ps = conn.prepareStatement(sql);
18:     ps.setString(1,name);


Stacktrace:
	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:581)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:457)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:349)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:300)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
根本原因。

javax.servlet.ServletException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 355 milliseconds ago.  The last packet sent successfully to the server was 348 milliseconds ago.
	org.apache.jasper.runtime.PageContextImpl.handlePageException(PageContextImpl.java:625)
	org.apache.jsp.jdbc_jsp._jspService(jdbc_jsp.java:173)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:62)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:349)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:300)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
根本原因。

com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure

The last packet successfully received from the server was 355 milliseconds ago.  The last packet sent successfully to the server was 348 milliseconds ago.
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
	com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:981)
	com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:164)
	com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4801)
	com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1643)
	com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1215)
	com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2255)
	com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286)
	com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085)
	com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:795)
	com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
	com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400)
	com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327)
	java.sql.DriverManager.getConnection(DriverManager.java:664)
	java.sql.DriverManager.getConnection(DriverManager.java:247)
	org.apache.jsp.jdbc_jsp._jspService(jdbc_jsp.java:138)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:62)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:349)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:300)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
根本原因。

javax.net.ssl.SSLHandshakeException: No appropriate protocol (protocol is disabled or cipher suites are inappropriate)
	sun.security.ssl.HandshakeContext.<init>(HandshakeContext.java:172)
	sun.security.ssl.ClientHandshakeContext.<init>(ClientHandshakeContext.java:106)
	sun.security.ssl.TransportContext.kickstart(TransportContext.java:245)
	sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:410)
	sun.security.ssl.SSLSocketImpl.startHandshake(SSLSocketImpl.java:389)
	com.mysql.jdbc.ExportControlled.transformSocketToSSLSocket(ExportControlled.java:149)
	com.mysql.jdbc.MysqlIO.negotiateSSLConnection(MysqlIO.java:4801)
	com.mysql.jdbc.MysqlIO.proceedHandshakeWithPluggableAuthentication(MysqlIO.java:1643)
	com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1215)
	com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2255)
	com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2286)
	com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2085)
	com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:795)
	com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:44)
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
	java.lang.reflect.Constructor.newInstance(Constructor.java:423)
	com.mysql.jdbc.Util.handleNewInstance(Util.java:404)
	com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:400)
	com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:327)
	java.sql.DriverManager.getConnection(DriverManager.java:664)
	java.sql.DriverManager.getConnection(DriverManager.java:247)
	org.apache.jsp.jdbc_jsp._jspService(jdbc_jsp.java:138)
	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:62)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:438)
	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:349)
	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:300)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:623)
	org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
):注意 主要问题的全部 stack 信息可以在 server logs 里查看

运行

访问http://localhost:8085/jsp03/jdbc.jsp

输入张三并提交

可以看到已经准确查询出相关信息

相关推荐
Hx_Ma161 小时前
测试题(六)
java·tomcat·mybatis
码云数智-大飞1 小时前
.NET 10 & C# 14 新特性详解:扩展成员 (Extension Members) 全面指南
java·数据库·算法
Anastasiozzzz1 小时前
阿亮随手录-SpringBoot启动流程、三级缓存要求、BeanFactory与FactoryBean、AutoWired与Resource、不推荐字段注入
java·spring
独自破碎E2 小时前
BISHI61 小q的数列
java·开发语言
Dylan的码园2 小时前
从软件工程师看计算机是如何工作的
java·jvm·windows·java-ee
callJJ2 小时前
Spring AI Tool Calling(工具调用)详解——让大模型拥有“动手能力“
java·人工智能·spring·spring ai·tool calling
南部余额2 小时前
SpringBoot文件上传全攻略
java·spring boot·后端·文件上传·multipartfile
java1234_小锋3 小时前
Java高频面试题:什么是Redis哨兵机制?
java·redis·面试
苦学编程的谢3 小时前
好运buff机 ------ 测试报告
java·开发语言·功能测试