JavaWeb预习(jdbc)
基础
1.驱动程序接口Driver
每种数据库都提供了数据库驱动程序,并且都提供了一个实现java.sql.Driver接口的类,称为Driver
对于MySql,其Driver类为com.mysql.jdbc.Driver,加载该类的语句为:
Class.forName("com.mysql.jdbc.Driver")
2.驱动程序管理器DriverManager
DriverManager类用来建立数据库连接
Connection getConnection(String url,String user,String password)
URL语法格式为:
jdbc:子协议:数据源
eg:
String url = "jdbc:mysql:localhost:3306/user";
Connection con = DriverManager.getConnection(url,"root","123456");
3.数据库连接接口Connection
Java程序对数据库的操作都在该对象上进行
eg:
Statement stmt = con.createStatement();
该语句不需要SQL语句,在执行时加上SQL就行
还有PreparedStatement,直接在括号加上sql执行
4.执行SQL语句接口Statement
用来执行静态SQL语句,并返回执行结果,
executeQuery(String sql)执行select
executeUpdate(String sql)执行insert,update,delete
增加
JDBC连接数据库
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager" %>
<%@page import="java.sql.Connection" %>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%String driverName = "com.mysql.jdbc.Driver";String userName = "root";String userPwd = "1234";String dbName = "students";String url1 = "jdbc:mysql://localhost:3306/"+dbName;String url2 = "?user="+userName+"&password="+userPwd;String url3 = "&useUnicode=true&characterEncoding=UTF-8";String url = url1+url2+url3;Class.forName(driverName);Connection conn = DriverManager.getConnection(url);String sql = "Insert into stu_info(id,name,sex,age,weight,hight) values(?,?,?,?,?,?)";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setInt(1,16);pstmt.setString(2,"张三");pstmt.setString(3,"男");pstmt.setInt(4,20);pstmt.setFloat(5,70);pstmt.setFloat(6,175);int n = pstmt.executeUpdate();if(n == 1){%> 数据插入成功<br> <%}else{%> 数据插入失败<br><%}if(pstmt != null){pstmt.close();}if(conn != null){conn.close();}%>
</body>
</html>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%String driverName = "com.mysql.jdbc.Driver";String dbName = "students";String userName = "root";String userPwd = "1234";String url1 = "jdbc:mysql://localhost:3306/"+dbName;String url2 = "?user="+userName+"&password="+userPwd;String url3 = "&useUnicode=true&characterEncoding=UTF-8";String url = url1+url2+url3;Class.forName(driverName);Connection conn = DriverManager.getConnection(url);String sql = "Insert into stu_info(id,name,sex,age,weight,hight) values(17,'王五','男',21,80,170)";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.executeUpdate();%>
</body>
</html>
实例:
1.表单:
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>添加学生</title>
</head>
<body><form action="sjk.jsp" method="post"><table><tr><td>学号</td><td><input type="text" name="id"></td></tr><tr><td>姓名</td><td><input type="text" name="name"></td></tr><tr><td>性别</td><td><input type="text" name="sex"></td></tr><tr><td>年龄</td><td><input type="text" name="age"></td></tr><tr><td>体重</td><td><input type="text" name="weight"></td></tr><tr><td>身高</td><td><input type="text" name="hight"></td></tr><tr><td colspan="2" align="center"><input type="submit" value="提交"> <input type="reset" value="取消"></td></tr></table></form>
</body>
</html>
2.连接数据库:
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%String driverName = "com.mysql.jdbc.Driver";String dbName = "students";String userName = "root";String userPwd = "1234";String url1 = "jdbc:mysql://localhost:3306/"+dbName;String url2 = "?user="+userName+"&password="+userPwd;String url3 = "&useUnicode=true&characterEncoding=UTF-8";String url = url1+url2+url3;Class.forName(driverName);Connection conn = DriverManager.getConnection(url);String sql = "Insert into stu_info(id,name,sex,age,weight,hight) values(?,?,?,?,?,?)";PreparedStatement pstmt = conn.prepareStatement(sql);request.setCharacterEncoding("UTF-8");int id = Integer.parseInt(request.getParameter("id"));String name = request.getParameter("name");String sex = request.getParameter("sex");int age = Integer.parseInt(request.getParameter("age"));float weight = Float.parseFloat(request.getParameter("weight"));float hight = Float.parseFloat(request.getParameter("hight"));pstmt.setInt(1,id);pstmt.setString(2,name);pstmt.setString(3,sex);pstmt.setInt(4,age);pstmt.setFloat(5,weight);pstmt.setFloat(6,hight);try{int n = pstmt.executeUpdate();if(n==1){%>数据插入成功<br><%}else {%>数据插入失败<br><%}}catch(Exception e){%>更新过程出现异常错误!<br><%=e.getMessage() %><%}%>
</body>
</html>
3.回显
<%@page import="java.sql.ResultSet"%>
<%@page import="java.sql.PreparedStatement"%>
<%@page import="java.sql.DriverManager"%>
<%@page import="java.sql.Connection"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>学生数据表</title>
</head>
<body><%String driverName = "com.mysql.jdbc.Driver";String userName = "root";String userPwd = "1234";String dbName = "students";String url1 = "jdbc:mysql://localhost:3306/" + dbName;String url2 = "?user=" + userName + "&password=" + userPwd;String url3 = "&useUnicode=true&characterEncoding=UTF-8";String url = url1 + url2 + url3;Connection conn = null;PreparedStatement pstmt = null;ResultSet rs = null;try {Class.forName(driverName);conn = DriverManager.getConnection(url);// 创建可滚动的 PreparedStatementString sql = "select * from stu_info";pstmt = conn.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);rs = pstmt.executeQuery();// 获取记录总数rs.last();int totalRows = rs.getRow();%>你要查询的学生数据表中共有<%= totalRows %> 人<center><table border="1"><tr><td>记录条数</td><td>学号</td><td>姓名</td><td>性别</td><td>年龄</td><td>体重</td><td>身高</td></tr><%// 将光标移动到结果集的开始位置rs.beforeFirst(); while(rs.next()){%><tr><td><%= rs.getRow() %></td><td><%= rs.getString("id") %></td><td><%= rs.getString("name") %></td><td><%= rs.getString("sex") %></td><td><%= rs.getString("age") %></td><td><%= rs.getString("weight") %></td><td><%= rs.getString("hight") %></td></tr><%}%></table></center><%} catch (Exception e) {e.printStackTrace();%><p style="color:red">发生错误: <%= e.getMessage() %></p><%} finally {// 确保资源被关闭try {if (rs != null) rs.close();if (pstmt != null) pstmt.close();if (conn != null) conn.close();} catch (Exception e) {e.printStackTrace();}} // 确保 finally 块正确闭合%>
</body>
</html>
4.带条件的回显
<%@page contentType="text/html" pageEncoding="UTF-8" import="java.sql.*"%>
<html><head><title>查询满足条件的学生页面</title> <style>.style1 {border-collapse: collapse;border-spacing: 0px;}</style></head><body><%String dbName = "students";String driverName = "com.mysql.jdbc.Driver";String userName = "root";String userPwd = "1234";String url1 = "jdbc:mysql://localhost:3306/"+dbName;String url2 = "?user="+userName+"&password="+userPwd;String url3 = "&useUnicode=true&characterEncoding=UTF-8";String url = url1+url2+url3;Class.forName(driverName);Connection conn = DriverManager.getConnection(url);String sql = "select * from stu_info where weight>=? and weight<=?";PreparedStatement pstmt = null;ResultSet rs = null;pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);pstmt.setFloat(1, 60);pstmt.setFloat(2,80);rs = pstmt.executeQuery();rs.last();%>共有<%=rs.getRow() %>人<center><table border="1" class="style1"><tr><td>记录条数</td><td>学号</td><td>姓名</td><td>性别</td><td>年龄</td><td>身高</td><td>体重</td></tr><%rs.beforeFirst();while(rs.next()){%><tr><td><%=rs.getRow() %></td><td><%=rs.getString("id") %></td><td><%=rs.getString("name") %></td><td><%=rs.getString("sex") %></td><td><%=rs.getString("age") %></td><td><%=rs.getString("hight") %></td><td><%=rs.getString("weight") %></td></tr><%}%></table></center><%if(rs!=null){rs.close();}if(conn!=null){conn.close();}if(pstmt!=null){pstmt.close();}%></body>
</html>
5.加客户端的条件查询
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>条件查询页面</title><style>
.css1 {width: 40px;
}
</style>
</head>
<body><form action="huixian2.jsp" method="post">性别:男<input type="radio" value="男" name="sex" checked="checked"> 女<input type="radio" value="女" name="sex"><br>体重范围:最小<input type="text" name="w1" class="css1"> 最大<input type="text" name="w2" class="css1"><br><input type="submit" value="提交"> <input type="reset" value="取消"></form>
</body>
</html>
<%@page contentType="text/html" pageEncoding="UTF-8" import="java.sql.*"%>
<html><head><title>查询满足条件的学生页面</title> <style>.style1 {border-collapse: collapse;border-spacing: 0px;}</style></head><body><%String dbName = "students";String driverName = "com.mysql.jdbc.Driver";String userName = "root";String userPwd = "1234";String url1 = "jdbc:mysql://localhost:3306/"+dbName;String url2 = "?user="+userName+"&password="+userPwd;String url3 = "&useUnicode=true&characterEncoding=UTF-8";String url = url1+url2+url3;Class.forName(driverName);Connection conn = DriverManager.getConnection(url);String sql = "select * from stu_info where sex=? and weight>=? and weight<=?";PreparedStatement pstmt = null;ResultSet rs = null;pstmt = conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);request.setCharacterEncoding("UTF-8");pstmt.setString(1,request.getParameter("sex"));pstmt.setFloat(2,Float.parseFloat(request.getParameter("w1")));pstmt.setFloat(3,Float.parseFloat(request.getParameter("w2")));rs = pstmt.executeQuery();rs.last();%>共有<%=rs.getRow() %>人<center><table border="1" class="style1"><tr><td>记录条数</td><td>学号</td><td>姓名</td><td>性别</td><td>年龄</td><td>身高</td><td>体重</td></tr><%rs.beforeFirst();while(rs.next()){%><tr><td><%=rs.getRow() %></td><td><%=rs.getString("id") %></td><td><%=rs.getString("name") %></td><td><%=rs.getString("sex") %></td><td><%=rs.getString("age") %></td><td><%=rs.getString("hight") %></td><td><%=rs.getString("weight") %></td></tr><%}%></table></center><%if(rs!=null){rs.close();}if(conn!=null){conn.close();}if(pstmt!=null){pstmt.close();}%></body>
</html>
删除
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8" import="java.sql.*"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><%request.setCharacterEncoding("UTF-8");String driverName = "com.mysql.jdbc.Driver";String dbName = "students";String userName = "root";String userPwd = "1234";String url1 = "jdbc:mysql://localhost:3306/"+dbName;String url2 = "?user="+userName+"&password="+userPwd;String url3 = "&useUnicode=true&characterEncoding=UTF-8"; String url = url1+url2+url3;Class.forName(driverName);Connection conn = DriverManager.getConnection(url);String sql = "Delete from stu_info where name = ?";PreparedStatement pstmt = conn.prepareStatement(sql);pstmt.setString(1, request.getParameter("name"));try{ int n= pstmt.executeUpdate();if(n>=1){%>数据删除操作成功!<br><%}else{%>数据删除操作失败!<br><%} }catch(Exception e){%>删除更新过程出现异常错误!<br><%=e.getMessage()%><% }if(conn!=null){conn.close();}if(pstmt!=null){pstmt.close();}%>
</body>
</html>
<%@ page language="java" contentType="text/html; charset=UTF-8"pageEncoding="UTF-8"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body><form action="delete.jsp" method="post">
请输入要删除数据的姓名:
<input type="text" name="name"><br>
<input type="submit" value="提交">
</form></body>
</html>
相关文章:
JavaWeb预习(jdbc)
基础 1.驱动程序接口Driver 每种数据库都提供了数据库驱动程序,并且都提供了一个实现java.sql.Driver接口的类,称为Driver 对于MySql,其Driver类为com.mysql.jdbc.Driver,加载该类的语句为: Class.forName("c…...

Web3 借贷与清算机制全解析:链上金融的运行逻辑
Web3 借贷与清算机制全解析:链上金融的运行逻辑 超额抵押借款 例如,借款人用ETH为抵押借入DAI;借款人的ETH的价值一定是要超过DAI的价值;借款人可以任意自由的使用自己借出的DAI 稳定币 第一步:借款人需要去提供一定…...

【Vue3】(三)vue3中的pinia状态管理、组件通信
目录 一、vue3的pinia 二、【props】传参 三、【自定义事件】传参 四、【mitt】传参 五、【v-model】传参(平常基本不写) 六、【$attrs】传参 七、【$refs和$parent】传参 八、provide和inject 一、vue3的pinia 1、什么是pinia? pinia …...
ingress-nginx 开启 Prometheus 监控 + Grafana 查看指标
环境已经部署了 ingress-nginx(DaemonSet 方式),并且 Prometheus Grafana 也已经运行。但之前 /metrics 端点没有暴露 Nginx 核心指标(如 nginx_ingress_controller_requests_total),经过调整后现在可以正…...
SQL进阶之旅 Day 21:临时表与内存表应用
【SQL进阶之旅 Day 21】临时表与内存表应用 文章简述 在SQL开发过程中,面对复杂查询、数据预处理和性能优化时,临时表和内存表是不可或缺的工具。本文深入讲解了临时表(Temporary Table)和内存表(Memory Table&#x…...

Jenkins自动化部署Maven项目
Jenkins自动化部署Maven项目 一、环境准备(Prerequisites) SpringBoot项目 确保项目根目录有标准Maven结构(pom.xml)且包含Dockerfile: # Dockerfile 示例 FROM openjdk:11-jre-slim VOLUME /tmp ARG JAR_FILE=target/*.jar COPY ${JAR_FILE} app.jar ENTRYPOINT ["j…...

LeetCode 高频 SQL 50 题(基础版)之 【高级字符串函数 / 正则表达式 / 子句】· 上
题目:1667. 修复表中的名字 题解: select user_id, concat(upper(left(name,1)),lower(right(name,length(name)-1))) name from Users order by user_id题目:1527. 患某种疾病的患者 题解: select * from Patients where con…...

Python 中 Django 中间件:原理、方法与实战应用
在 Python 的 Web 开发领域,Django 框架凭借其高效、便捷和功能丰富的特点备受开发者青睐。而 Django 中间件作为 Django 框架的重要组成部分,犹如 Web 应用的 “交通枢纽”,能够在请求与响应的处理流程中,实现对请求和响应的拦截…...

深入浅出玩转物联网时间同步:基于BC260Y的NTP实验与嵌入式仿真教学革命
在万物互联的时代,精准的时间戳是物联网系统的神经节拍器,而NTP协议正是维持这一节律的核心技术。 一、时间同步:物联网世界的隐形基石 在智慧城市、工业4.0等场景中,分散的设备需要毫秒级的时间协同。网络时间协议(N…...
数学建模期末速成 主成分分析的基本步骤
设有 n n n个研究对象, m m m个指标变量 x 1 , x 2 , ⋯ , x m x_1,x_2,\cdots,x_m x1,x2,⋯,xm,第 i i i个对象关于第 j j j个指标取值为 a i j a_{ij} aij,构造数据矩阵 A ( a i j ) n m A\left(\begin{array}{c}a_{ij}\end{array}\right)_{…...
视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲
视频音频去掉开头结尾 视频去掉前n秒后n秒 视频音频去掉开头结尾 视频去掉前n秒后n秒 电视剧去掉开头歌曲 如果你有一些视频或者音频,你想去掉开头或结尾的几秒钟,那么你可以尝试一下这个工具,首先,我们来看一下,我们以…...

【在线五子棋对战】二、websocket 服务器搭建
文章目录 Ⅰ. WebSocket1、简介2、特点3、原理解析4、报文格式 Ⅱ. WebSocketpp1、认识2、常用接口3、websocketpp库搭建服务器搭建流程主体框架填充回调函数细节 4、编写 makefile 文件5、websocket客户端 Ⅰ. WebSocket 1、简介 WebSocket 是从 HTML5 开始支持的一种网页端…...

C++课设:从零开始打造影院订票系统
名人说:路漫漫其修远兮,吾将上下而求索。—— 屈原《离骚》 创作者:Code_流苏(CSDN)(一个喜欢古诗词和编程的Coder😊) 专栏介绍:《编程项目实战》 目录 一、项目背景与需求分析二、系统架构设计…...

【计算机网络】数据链路层-滑动窗口协议
数据链路层滑动窗口协议 1. 三种协议对比表 特性停止-等待协议GBN协议SR协议窗口大小发送 1,接收 1发送 W (1<W≤2ⁿ-1),接收 1发送 C,接收 R确认方式单个确认累积确认选择性确认重传策略超时重传回退N帧重传选择性重传接收缓冲区…...

在linux系统上,如何安装Elasticsearch?
1.问题描述 当尝试连接时报错,报错内容为: elastic_transport.ConnectionError: Connection error caused by: ConnectionError(Connection error caused by: NewConnectionError(<urllib3.connection.HTTPConnection object at 0x7fd808b179d0>:…...

wpf Behaviors库实现支持多选操作进行后台绑定数据的ListView
<ListView ItemsSource"{Binding SchemeItems}" SelectionMode"Extended" VerticalAlignment"Stretch" HorizontalAlignment"Stretch"><ListView.ContextMenu><ContextMenu><MenuItem Header"删除" …...
【HarmonyOS 5】拍摄美化开发实践介绍以及详细案例
以下是 HarmonyOS 5 拍摄美化功能的简洁介绍,整合核心能力与技术亮点: 一、AI 影像创新 AI 魔法移图 系统级图像分层技术实现人物/物体自由拖拽、缩放与复制,突破传统构图限制。自动分离主体与背景,一键生成错位创意照&…...

《Vuejs设计与实现》第 8 章(挂载与更新)
目录 8.1 挂载子节点与属性 8.2 HTML Attributes 与 DOM Properties 8.3 设置元素属性的正确方式 8.4 处理 class 属性 8.5 卸载操作 8.6 区分 vnode 类型 8.7 事件处理优化 8.8 事件冒泡与更新时机问题 8.9 子节点的更新 8.10 文本节点和注释节点 8.11 片段…...

Ubuntu20.04中 Redis 的安装和配置
Ubuntu20.04 中 Redis 的安装和配置 Ubuntu 安装 MySQL 及其配置 1. Redis 的安装 更新系统包列表并安装 Redis : # 更新包管理工具 sudo apt update# -y:自动确认所有提示(非交互式安装) sudo apt install -y redis-server测…...
从游戏到自动驾驶:互联网时代强化学习如何让机器学会自主决策?
一、为什么机器需要“试错学习”?——强化学习的核心秘密 你有没有玩过《超级马里奥》?当你操控马里奥躲避乌龟、跳过悬崖时,其实就在用一种“试错”的方法学习最优路径。强化学习(Reinforcement Learning, RL)就是让…...

实验四:图像灰度处理
实验四 图像处理实验报告 目录 实验目的实验内容 原理描述Verilog HDL设计源代码Testbench仿真代码及仿真结果XDC文件配置下板测试 实验体会实验照片 实验目的 在实验三的基础上,将图片显示在显示器上,并进行灰度处理。 实验内容 原理描述 1. 图片的…...
asp.net mvc如何简化控制器逻辑
在ASP.NET MVC中,可以通过以下方法简化控制器逻辑: ASP.NET——MVC编程_aspnet mvc-CSDN博客 .NET/ASP.NET MVC Controller 控制器(IController控制器的创建过程) https://cloud.tencent.com/developer/article/1015115 【转载…...

解析“与此站点的连接不安全”警告:成因与应对策略
一、技术本质:SSL/TLS协议的信任链断裂 现代浏览器通过SSL/TLS协议建立加密通信,其核心在于证书颁发机构(CA)构建的信任链。当用户访问网站时,浏览器会验证服务器证书的有效性,包括: 证书链完…...
PyCharm和VS Code哪个更适合初学者
对于 Python 初学者来说,选择 VS Code 还是 PyCharm 取决于你的具体需求和使用场景。以下是两者的详细对比和推荐建议: VS Code 优点: 轻量级:启动速度快,占用资源少,适合在低端设备上运行。高度可定制&am…...

⚡️ Linux Docker 基本命令参数详解
🐳 Linux Docker 基本命令参数详解 📘 1. Docker 简介 Docker 是一个开源的容器化平台,它通过将应用及其依赖打包到一个轻量级、可移植的容器中,从而实现跨平台运行。Docker 采用 C/S 架构,服务端称为 Docker Daemon&a…...

做题笔记(ctfshow)
一。ctfshow web13 文件扫描 存在upload.php.bak <?php header("content-type:text/html;charsetutf-8");$filename $_FILES[file][name];$temp_name $_FILES[file][tmp_name];$size $_FILES[file][size];$error $_FILES[file][error];$arr pathinfo($fi…...
Linux 用户层 和 内核层锁的实现
目录 一、系统调用futex介绍1. 核心机制2. 常见操作3. 工作流程示例(互斥锁)4. 优势5. 注意事项6. 典型应用 二、Linux中用户态的锁和内核的锁不是同一个实现吗?2.1 本质区别2.2 用户态锁如何工作(以 pthread_mutex 为例ÿ…...
Android第十五次面试总结(第三方组件和adb命令)
Android 第三方组件转为系统组件核心流程 这通常是在进行 Android 系统定制(如 ROM 开发、固件制作)时完成,目的是让第三方应用拥有更高的权限和系统身份。主要过程如下: 核心准备:签名!赋予系统身份 …...

Agent短期记忆的几种持久化存储方式
今天给大家讲一下关于Agent长期对话的几种持久化存储方式,之前的文章给大家说过短期记忆和长期记忆,短期记忆基于InMemorySaver做checkpointer(检查点),短期记忆 (线程级持久性) 使代理能够跟踪…...

Git 常见操作
目录 1.git stash 2.合并多个commit 3. git commit -amend (后悔药) 4.版本回退 5.merge和rebase 6.cherry pick 7.分支 8.alias 1.git stash git-stash操作_git stash 怎么增加更改内容-CSDN博客 2.合并多个commit 通过git bash工具交互式操作。 1.查询commit的c…...