第一次写的博客,就拿一个以前做的JDBC+JSP例子来分享一下吧.首先说一下JDBC的操作步骤:
1、加载JDBC驱动程序 2、提供JDBC连接的URL 3、创建数据库的连接
4、执行SQL语句 5处理结果 6关闭JDBC对象 。
本文就做一个简单的用户登陆以及添加、删除和修改例子,使用的是mysql数据库。
数据库设计
用户表 |
||||
user |
No |
列名称 |
描述 |
|
id |
Int <pk> |
1 |
Id |
主键,自动增长 |
username |
Varchar(200) |
2 |
username |
用户登陆名 |
password |
Varchar(200) |
3 |
password |
用户登陆密码 |
首先
将mysql的驱动包复制到项目lib文件夹下
首先是一个登陆界面
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'index.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> </head> <body> <center> <h1>登陆操作</h1> <hr> <form action="login_check.jsp" method="post"> <table border="1"> <tr> <td colspan="2"> 用户登陆 </td> </tr> <tr> <td>登陆名:</td> <td><input type="text" name="name"></td> </tr> <tr> <td>登陆密码:</td> <td><input type="password" name="password"></td> </tr> <tr> <td colspan="2"> <input type="submit" value="登陆"> <input type="reset" value="重置"> </td> </tr> </table> </form> </center> </body> </html>
界面视图:
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'login_check.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <center> <h1> 登陆操作 </h1> <jsp:include page="dataconn.jsp" /> <!--这里是包含数据库连接的页面 --> <hr> <% Connection conn =(Connection)request.getAttribute("conn"); // 数据库连接 PreparedStatement pstmt = null; // 数据库预处理操作 ResultSet rs = null; // 查询要处理结果集 boolean flag = false; // 保存标记 %> <% try { %> <% String sql = "SELECT username FROM user WHERE username=? AND password=?";//此sql语句是传入用户名和密码查询出用户名 pstmt = conn.prepareStatement(sql);//实例化数据库操作对象 pstmt.setString(1, request.getParameter("name"));//设置用户名 pstmt.setString(2, request.getParameter("password"));//设置密码 rs = pstmt.executeQuery(); // 查询 if (rs.next()) { // 如果有数据,则可以执行 flag = true; // 表示登陆成功 } %> <% } catch (Exception e) { e.printStackTrace(); } finally { %> <jsp:include page="dataclose.jsp"/><!--这里是包含数据库关闭的页面 --> <% } %> <% if (flag) { // 登陆成功跳转到list.jsp页面 %> <jsp:forward page="list.jsp"/> <% } else { // 登陆失败则跳转到错误的页面 %> <jsp:forward page="login_failure.jsp" /> <% } %> </center> </body> </html>
本页面上以及后面的页面上都没见到数据库的连接和数据关闭代码,因为数据的连接代码已经写在dataconn.jsp页面上了,页面只要包含即可,包含语句<jsp:include page="dataconn.jsp" />、<jsp:include page="dataclose.jsp"/>,这样使代码的重用性得到了很大的提高。
<%@ page import="java.sql.*"%> <%!// 定义若干个数据库的连接常量 public static final String DBDRIVER = "org.gjt.mm.mysql.Driver";//定义数据库驱动程序 public static final String DBURL = "jdbc:mysql://localhost:3306/user";//数据库连接地址 public static final String DBUSER = "root";//数据库连接用户名 public static final String DBPASS = "admin";//数据库连接密码%> <% Connection conn = null; // 数据库连接 Class.forName(DBDRIVER); //加载驱动程序 conn = DriverManager.getConnection(DBURL, DBUSER, DBPASS);//取得数据库的连接 PreparedStatement pstmt = null; // 数据库预处理操作 ResultSet rs = null; // 查询要处理结果集 request.setAttribute("conn",conn);//设置数据库连接 request.setAttribute("pstmt",pstmt); request.setAttribute("rs",rs); %>
<%@ page import="java.sql.*"%> <% try { ((ResultSet)request.getAttribute("rs")).close();//关闭查询对象 ((PreparedStatement)request.getAttribute("pstmt")).close();//关闭操作对象 ((Connection)request.getAttribute("conn")).close();//关闭数据库连接 } catch (Exception e) { } %>
下面 需要注意个问题,就是<jsp:forward page="" />
跳转语句后面不能是<jsp:forward page="" flush="true"/>,这样会报
的异常,如果不写则默认为false.
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'list.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <table border="1" width="80%"> <tr> <td> id </td> <td> 用户名 </td> <td> 密码 </td> <td> 操作|| <a href="insert.jsp">添加</a> </td> </tr> <jsp:include page="dataconn.jsp" flush="true" /> <!--这里是包含数据库连接的页面 --> <% Connection conn = ((Connection)request.getAttribute("conn")); // 数据库连接 PreparedStatement pstmt = null; // 数据库预处理操作 ResultSet rs = null; // 查询要处理结果集 boolean flag = false; // 保存标记 %> <% String id = null; //保存id String name = null; //保存用户名 String pass = null; //保存密码 try {//JDBC操作会抛出异常,使用try...catch处理 %> <% String sql = "SELECT id,username,password FROM user ";//此sql语句是从usre表中查出所有的记录,select后面的字段全部改为*也可以 pstmt = conn.prepareStatement(sql);//实例化数据库操作对象 rs = pstmt.executeQuery();//实行查询 while (rs.next()) { // 如果有数据,则可以执行 id = rs.getString(1); //将从数据库查询出来的记录集第1位赋给id name = rs.getString(2); //将从数据库查询出来的记录集第2位赋给name(用户名) pass = rs.getString(3); //将从数据库查询出来的记录集第3位赋给pass(密码) %> <tr> <td><%=id%></td> <!--显示id--> <td><%=name%></td> <!--显示用户名--> <td><%=pass%></td> <!--显示密码--> <td> <a href="update.jsp?id=<%=id%>">修改</a>|| <!--因为要根据id修改,修改时需要将id通过地址重写的方式传过去--> <a href="delete_do.jsp?id=<%=id%>">删除</a> <!--要根据id删除--> </td> </tr> <% }//注意:我们的<tr>元素是在while循环里面,所以才能将全部记录列出来 } catch (Exception e) { e.printStackTrace(); } finally {//不管怎么样都要关闭数据库连接 %> <jsp:include page="dataclose.jsp"/><!--这里是包含数据库包含的页面 --> <% } %> </table> </body> </html>
界面视图:
这个列表页面我们要进行操作有查询所有、删除、修改和添加操作。
代码注释很清楚了。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'insert.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <center> <h1>注册操作</h1> <hr> <form action="insert_do.jsp" method="post"> <table border="1"> <tr> <td colspan="2"> 用户注册 </td> </tr> <tr> <td>登陆名:</td> <td><input type="text" name="name"></td> </tr> <tr> <td>登陆密码:</td> <td><input type="password" name="password"></td> </tr> <tr> <td colspan="2"> <input type="submit" value="注册"> <input type="reset" value="重置"> </td> </tr> </table> </form> </center> </body> </html>
这个页面跟登陆页面类似,这里就不讲了
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'inset_do.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <center> <h1> 注册操作 </h1> <hr> <jsp:include page="dataconn.jsp" flush="true" /> <!--这里是包含数据库连接的页面 --> <% Connection conn = ((Connection)request.getAttribute("conn")); // 数据库连接 PreparedStatement pstmt = null; // 数据库预处理操作 ResultSet rs = null; // 查询要处理结果集 boolean flag = false; // 保存标记 %> <% try { %> <% String sql = "INSERT INTO user(username,password) VALUES(?,?)";//插入语句 pstmt = conn.prepareStatement(sql);//实例化数据库操作对象 pstmt.setString(1, request.getParameter("name"));//设置用户名 pstmt.setString(2, request.getParameter("password"));//设置密码 if (pstmt.executeUpdate() > 0) { // 如果有数据,则可以执行 flag = true; // 表示注册成功 } %> <% } catch (Exception e) { e.printStackTrace(); } finally { %> <jsp:include page="dataclose.jsp"/><!--这里是包含数据库关闭的页面 --> <% } %> <% if (flag) { // 注册成功 %> <h2> 注册成功 </h2> <jsp:forward page="list.jsp" /><!--跳转到list.jsp --> <% } else { // 注册失败 %> <h2> 注册失败 </h2> <% } %> </center> </body> </html>
添加成功后还是跳回list.jsp页面,如果失败则显示添加失败。
接下来是修改,修改之前要先根据id将这条记录查询出来,给用户显示,
当点击“修改”的时候将id传过去,并且根据id将记录查询出来
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String path = request.getContextPath(); String basePath = request.getScheme() + "://" + request.getServerName() + ":" + request.getServerPort() + path + "/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'update.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <jsp:include page="dataconn.jsp" flush="true" /> <!--这里是包含数据库连接的页面 --> <% Connection conn =(Connection)request.getAttribute("conn"); // 数据库连接 PreparedStatement pstmt = null; // 数据库预处理操作 ResultSet rs = null; // 查询要处理结果集 boolean flag = false; // 保存标记 int userid=0; //保存id String name = null; //保存用户名 String pass = null; //保存密码 %> <% try {//JDBC操作会抛出异常,使用try...catch处理 %> <% String sql = "SELECT id,username,password FROM user WHERE id=? ";//此sql语句是根据id查询出一条记录 String id = request.getParameter("id").toString();//接收从上个表单传过来的id(从地址栏传来) pstmt = conn.prepareStatement(sql); pstmt.setString(1, id);//设置第一个“?”的内容,即id的内容 rs = pstmt.executeQuery();//执行查询 if (rs.next()) { userid = rs.getInt(1);//取出id name = rs.getString(2);//取出用户名 pass = rs.getString(3);//取出密码 } %> <% } catch (Exception e) { e.printStackTrace(); } finally { try { rs.close();//关闭查询对象 pstmt.close();//关闭操作对象 conn.close();//关闭数据库连接 } catch (Exception e) { } } %> <body> <center> <h1> 更新操作 </h1> <hr> <form action="update_do.jsp" method="post"> <table border="1"> <tr> <td colspan="2"> 更新资料 </td> </tr> <tr> <td> 登陆名: </td> <td> <input type="text" name="name" value="<%=name%>"> </td> </tr> <tr> <td> 登陆密码: </td> <td> <input type="text" name="password" value="<%=pass%>"> </td> <input type="hidden" name="id" id="id" value="<%=userid%>"><!--用隱藏域來儲存id --> </tr> <tr> <td colspan="2"> <input type="submit" value="修改"> <input type="reset" value="重置"> </td> </tr> </table> </form> </center> </body> </html>
接下来是删除,删除跟修改一样,只要把id传过去,再根据id删除整条记录。
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'update_do.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <center> <h1>更新操作</h1> <hr> <jsp:include page="dataconn.jsp" /> <!--这里是包含数据库连接的页面 --> <% Connection conn = ((Connection)request.getAttribute("conn")); // 数据库连接 PreparedStatement pstmt = null ; // 数据库预处理操作 ResultSet rs = null ; // 查询要处理结果集 boolean flag = false ; // 保存标记 %> <% try{ %> <% String sql = "UPDATE user SET username=?,password=? WHERE id=?" ;//此sql语句是 pstmt = conn.prepareStatement(sql) ; pstmt.setString(1,request.getParameter("name")) ;//设置用户名 pstmt.setString(2,request.getParameter("password")) ;//设置密码 pstmt.setString(3,request.getParameter("id")) ;//设置id if(pstmt.executeUpdate()>0){ // 如果有数据,则可以执行 flag = true ; // 表示更新成功 } %> <% }catch(Exception e) { e.printStackTrace() ; } finally{ %> <jsp:include page="dataclose.jsp"/><!--这里是包含数据库关闭的页面 --> <% } %> <% if(flag){ // 更新成功 %> <h2>更新成功</h2> <jsp:forward page="list.jsp" />//跳转到list.jsp <% } else { // 更新失败 %> <h2>更新失败</h2> <% } %> </center> <h2>返回首页<a href="list.jsp">点击这里</a></h2> </body> </html>
<%@ page language="java" import="java.util.*" pageEncoding="UTF-8"%> <%@ page import="java.sql.*"%> <% String path = request.getContextPath(); String basePath = request.getScheme()+"://"+request.getServerName()+":"+request.getServerPort()+path+"/"; %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <base href="<%=basePath%>"> <title>My JSP 'delete_do.jsp' starting page</title> <meta http-equiv="pragma" content="no-cache"> <meta http-equiv="cache-control" content="no-cache"> <meta http-equiv="expires" content="0"> <meta http-equiv="keywords" content="keyword1,keyword2,keyword3"> <meta http-equiv="description" content="This is my page"> <!-- <link rel="stylesheet" type="text/css" href="styles.css"> --> </head> <body> <center> <h1>删除操作</h1> <hr> <jsp:include page="dataconn.jsp" /> <!--这里是包含数据库连接的页面 --> <% Connection conn =(Connection)request.getAttribute("conn"); // 数据库连接 PreparedStatement pstmt = null ; // 数据库预处理操作 ResultSet rs = null ; // 查询要处理结果集 boolean flag = false ; // 保存标记 %> <% try{ %> <% String sql = "DELETE FROM user WHERE id=?" ; pstmt = conn.prepareStatement(sql) ; String id=request.getParameter("id").toString(); pstmt.setString(1,id); if(pstmt.executeUpdate()>0){ // 如果有数据,则可以执行 flag = true ; // 表示更新成功 } %> <% }catch(Exception e) { e.printStackTrace() ; } finally{ %> <jsp:include page="dataclose.jsp"/><!--这里是包含数据库关闭的页面 --> <% } %> <% if(flag){ // 删除成功 %> <jsp:forward page="list.jsp"/> <% } else { // 删除失败 %> <h2>删除失败</h2> <% } %> </center> </body> </html>
好,一个简单的登陆、删除、修改、添加的jdbc例子就完成。
总结一下:大家发现没有,有一大长串数据库连接的代码是重复的,也就是每次执行操作都需要进行数据库
的连接,不管是删除还是添加都一样,jdbc执行的流程就是这样,我们根据业务的不同而写不同的sql语句,
掌握以下几个基本的sql语句是非常重要的 :
添加:inser [into] 表名(列名,列名,...) values(值,值....)
删除:delete 表名 [where 列名=值]
修改:update 表名 set 列名=值,列名=值.... [where 列名=值]
查询:select 列名,列名 from 表名 [where 列名=值]
呵呵,第一次写的博客,代码有点多,如果有写不正确的地方,欢迎纠正。另外附有代码。
相关推荐
在这个"Struts+jdbc+jsp实例,员工增删改查"项目中,我们将深入理解这三个技术如何协同工作,实现对员工数据的CRUD(创建、读取、更新和删除)操作。 首先,Struts是一个基于MVC(模型-视图-控制器)设计模式的Java...
在这个"JDBC+servlet+jsp实例"中,很可能是使用了以下技术栈: 1. **用户界面**:用户通过浏览器发送HTTP请求,请求可能通过一个简单的表单提交,包含留言内容等信息。 2. **Servlet处理**:当请求到达服务器,...
2. JSP动作:如<jsp:useBean>实例化JavaBean,<jsp:setProperty>设置Bean属性。 3. 表达式:`${}`用于输出变量或表达式的结果。 4. 脚本元素:包括! %>定义Java代码,输出表达式。 在本教程的"EmployeeManager"示例...
【标题】:“JDBC+Servlet+JSP整合开发之-JSP项目实战” 在这个主题中,我们将深入探讨如何使用Java的三大Web开发技术——JDBC(Java Database Connectivity)、Servlet和JSP(JavaServer Pages)来构建一个完整的...
Java初学者在学习Web开发时,常常会接触到JDBC、Servlet和JSP这三个核心技术,它们是构建基于Java的动态Web应用程序的基础。以下是对这些技术的详细介绍: 1. JDBC(Java Database Connectivity): JDBC是Java...
综上所述,"图书管理系统(JDBC+JSP+Servlet)"项目是一个实践性强、涵盖技术全面的Java Web应用实例,适合初学者深入理解和掌握Web开发的基本技术,同时也为有经验的开发者提供了一个可参考的系统实现。通过该项目...
jsp+servlet+jdbc实现简单的购物车实例,购物数据通过session存储 1、加入购物车时,把数据保存在session中 2、点击系统退出时,购物车中的数据插入到数据库购物车表 3、再次登录时,查询数据库购物车表的数据加载到...
1. JSP动作指令:例如,<jsp:useBean>用来实例化JavaBean(这里是存储图书信息的类),<jsp:setProperty>设置Bean的属性。 2. EL表达式:用于在页面上输出Bean的属性值,如`${book.title}`显示图书标题。 3. JSTL...
**JSP+Servlet+JavaBean+JDBC简单登录实例详解** 在Web开发中,构建一个用户登录系统是常见的需求。本实例将详细讲解如何利用JavaServer Pages (JSP)、Servlet、JavaBean以及Java Database Connectivity (JDBC) 来...
在Web开发中,"JDBC+Servlet+JSP"是一个常见的技术栈,用于构建动态、交互式的Web应用程序。本项目通过这些技术实现了基本的数据操作功能,包括增(Add)、删(Delete)、改(Update)和查(Query),并集成了分页...
这个"jdbc+jsp+servlet视频截图"的学习资源适合初学者,通过博主的截图,你将能够理解这三个技术的基本概念和应用场景。JDBC教你如何用Java操作数据库,servlet教你如何构建服务端处理逻辑,而JSP则帮助你理解如何在...
【标题】:“学生信息管理系统jdbc+servlet+jsp+easyui”是一个基于Java技术栈的Web应用,用于管理和处理学生信息。这个系统的核心架构利用了Java的数据库连接(JDBC)来与数据库交互,Servlet作为服务器端的控制层...
在本实例中,MySQL存储和管理应用程序的数据,并通过JDBC接口与Java代码进行交互。 **实现步骤**: 1. **配置环境**:首先确保安装了Java运行环境(JRE)、Java开发工具(JDK)、MySQL服务器以及MySQL的JDBC驱动...
【标题】"基于JDBC+JSP+Servlet的图书管理系统"是一个典型的Web应用程序开发实例,主要使用了Java技术栈中的JDBC(Java Database Connectivity)、JSP(JavaServer Pages)和Servlet来实现对图书数据的管理。...
在这个"SpringMVC整合jdbc+json实例"中,我们将探讨如何将SpringMVC与Java数据库连接(JDBC)以及JSON数据格式相结合,以创建一个功能完善的Web应用。 首先,我们需要理解SpringMVC的核心组件: 1. **...
总结来说,这个压缩包很可能是为了教学或实践目的,提供了用Java的JSP技术结合JDBC连接并操作不同数据库的实例。用户可以通过学习和运行这些代码,理解如何在实际项目中灵活运用JSP和JDBC来实现数据库的增删查改操作...
综上所述,"struts2+spring2.5+jdbc+ext+json实例用到的lib包" 提供了构建一个完整的 Java Web 应用程序所需的核心库。Struts2 负责控制流程,Spring 2.5 实现依赖注入和数据访问,JDBC 处理数据库交互,Ext 创建...