1.0、JSTL与jsp实现对数据库的操作

MySql 数据库:

create database if not exists CommodityDB;
use CommodityDB; drop table if exists Commod;
create table Commod(
cid int primary key auto_increment comment '编号',
cname varchar(64) not null comment '商品名称',
cprice datetime not null comment '商品价格',
cdetail varchar(225) comment '商品描述'
); insert into Commod(cname,cprice,cdetail) values
('小米6',2499,'很不错的手机'),
('iPhoneX',5800,'不错,很贵'),
('锤子T3',2499,'不是很有名'),
('魅族手机',3699,'手机很好看'),
('OPPO R9',2599,'可以当炸弹用');

util工具类:

package com.hexianwei.util;

import java.sql.*;
import java.util.ArrayList;
import java.util.List; /**
* Sql的相关操作,增、删、改、查!
* @author 何仙伟
*
*/
public class DBUtil2 {
//连接对象
//Statement 命令对象
//打开连接
//关闭连接
//得到一个连接对象
//查询(有参,无参)
//修改(有参,无参) static Connection conn = null;
static Statement stmt = null;
//驱动,服务器地址,登录用户名,密码
static String DBDRIVER="com.mysql.jdbc.Driver";
static String DBURL="jdbc:mysql://localhost:3306/CommodityDB?serverTimezone=GMT%2B8";
static String DBUSER="root";
static String DBPWD="10086"; /**
* 打开连接
*/
public static void open() {
//加载驱动
try {
Class.forName(DBDRIVER);
conn=DriverManager.getConnection(DBURL,DBUSER,DBPWD); } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 关闭连接
*/
public static void close() {
try {
if(stmt!=null)
stmt.close();
if(conn!=null && !conn.isClosed())
conn.close();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
/**
* 得到一个连接对象,当用户使用DBUtil无法解决个性问题时
* 可以通过本方法获得连接对象
* @return
*/
public static Connection getConnection() {
try {
if(conn==null ||conn.isClosed())
open();
} catch (SQLException e) {
e.printStackTrace();
}
return conn;
} /**
* executeQuery
* executeUpdate
* 获得查询的数据集
* select * from student where name='' and sex=''
* @param sql
* @return
*/
public static ResultSet executeQuery(String sql) {
try {
open();//保证连接是成功的
stmt = conn.createStatement();
return stmt.executeQuery(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
} //修改表格内容
public static int executeUpdate(String sql) {
int result = 0;
try {
open();//保证连接是成功的
stmt = conn.createStatement();
result = stmt.executeUpdate(sql);
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
close();
}
return result;
}
/**
* 如果执行的查询或存储过程,会返回多个数据集,或多个执行成功记录数
* 可以调用本方法,返回的结果,
* 是一个List<ResultSet>或List<Integer>集合
* @param sql
* @return
*/
public static Object execute(String sql) {
boolean b=false;
try {
open();//保证连接是成功的
stmt = conn.createStatement();
b = stmt.execute(sql);
//true,执行的是一个查询语句,我们可以得到一个数据集
//false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
if(b){
return stmt.getResultSet();
}
else {
return stmt.getUpdateCount();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(!b) {
close();
}
}
return null;
}
public static Connection getConn() {
try {
Class.forName(DBDRIVER).newInstance();
conn=DriverManager.getConnection(DBURL, DBUSER, DBPWD);
} catch (InstantiationException | IllegalAccessException | ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return conn;
}
/**
* 查询数据,参数形式
* select * from student where name=? and sex=?
*/
public static ResultSet executeQuery(String sql,Object[] in) {
try {
open();//保证连接是成功的
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=0;i<in.length;i++)
pst.setObject(i+1, in[i]);
stmt = pst;//只是为了关闭命令对象pst
return pst.executeQuery();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return null;
}
/**
* 修改
*/
public static int executeUpdate(String sql,Object[] in) {
try {
open();//保证连接是成功的
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=0;i<in.length;i++)
pst.setObject(i+1, in[i]);
stmt = pst;//只是为了关闭命令对象pst
return pst.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}finally {
close();
}
return 0;
}
public static Object execute(String sql,Object[] in) {
boolean b=false;
try {
open();//保证连接是成功的
PreparedStatement pst = conn.prepareStatement(sql);
for(int i=0;i<in.length;i++)
pst.setObject(i+1, in[i]);
b = pst.execute();
//true,执行的是一个查询语句,我们可以得到一个数据集
//false,执行的是一个修改语句,我们可以得到一个执行成功的记录数
if(b){
System.out.println("----");
/*List<ResultSet> list = new ArrayList<ResultSet>();
list.add(pst.getResultSet());
while(pst.getMoreResults()) {
list.add(pst.getResultSet());
}*/
return pst.getResultSet();
}
else {
System.out.println("****");
List<Integer> list = new ArrayList<Integer>();
list.add(pst.getUpdateCount());
while(pst.getMoreResults()) {
list.add(pst.getUpdateCount());
}
return list;
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
if(!b) {
System.out.println("====");
close();
}
}
return null;
}
/**
* 调用存储过程 proc_Insert(?,?,?)
* @param procName
* @param in
* @return
*/
public static Object executeProcedure(String procName,Object[] in) {
open();
try {
procName = "{call "+procName+"(";
String link="";
for(int i=0;i<in.length;i++) {
procName+=link+"?";
link=",";
}
procName+=")}";
CallableStatement cstmt = conn.prepareCall(procName);
for(int i=0;i<in.length;i++) {
cstmt.setObject(i+1, in[i]);
}
if(cstmt.execute())
{
return cstmt.getResultSet();
}
else {
return cstmt.getUpdateCount();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} return null;
} /**
* 调用存储过程,并有输出参数
* @procName ,存储过程名称:proc_Insert(?,?)
* @in ,输入参数集合
* @output,输出参数集合
* @type,输出参数类型集合
*/
public static Object executeOutputProcedure(String procName,
Object[] in,Object[] output,int[] type){
Object result = null;
try {
CallableStatement cstmt = conn.prepareCall("{call "+procName+"}");
//设置存储过程的参数值
int i=0;
for(;i<in.length;i++){//设置输入参数
cstmt.setObject(i+1, in[i]);
//print(i+1);
}
int len = output.length+i;
for(;i<len;i++){//设置输出参数
cstmt.registerOutParameter(i+1,type[i-in.length]);
//print(i+1);
}
boolean b = cstmt.execute();
//获取输出参数的值
for(i=in.length;i<output.length+in.length;i++)
output[i-in.length] = cstmt.getObject(i+1);
if(b) {
result = cstmt.getResultSet();
}
else {
result = cstmt.getUpdateCount();
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return result;
}
}

Javabean:

package com.hexianwei.vo;

import java.util.*;

public class Commod{

    private int cid;
private String cname;
private double cprice;
private String cdetail; public int getcid(){
return cid;
}
public void setcid(int cid){
this.cid = cid;
}
public String getcname(){
return cname;
}
public void setcname(String cname){
this.cname = cname;
}
public double getcprice(){
return cprice;
}
public void setcprice(double cprice){
this.cprice = cprice;
}
public String getcdetail(){
return cdetail;
}
public void setcdetail(String cdetail){
this.cdetail = cdetail;
}
public Commod () {}
public Commod (int cid,String cname,double cprice,String cdetail) {
this.cid = cid;
this.cname = cname;
this.cprice = cprice;
this.cdetail = cdetail;
}
}

dao层:

package com.hexianwei.dao;

import com.hexianwei.util.DBUtil2;
import com.hexianwei.vo.Commod; import java.sql.ResultSet;
import java.util.ArrayList;
import java.util.List; public class CommodDao {
static List<Commod> list = new ArrayList<>(); /**
* 查询所有数据
*
* @return
*/
public List<Commod> getAll() {
list.clear();//调用方法之前把集合里的数据清空
Commod commod = null;
String sql = "select * from Commod";
ResultSet rs = DBUtil2.executeQuery(sql);
if (rs != null) {
try {
while (rs.next()) {
commod = new Commod(
rs.getInt(1),
rs.getString(2),
rs.getDouble(3),
rs.getString(4)
);
list.add(commod);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
DBUtil2.close();
}
}
return list;
} /**
* 添加数据
*
* @param cname
* @param cprice
* @param cdetail
* @return
*/
public int insert(String cname, double cprice, String cdetail) {
String sql = "insert into Commod(cname,cprice,cdetail) values(?,?,?)";
Object[] in = {cname, cprice, cdetail};
return DBUtil2.executeUpdate(sql, in);
} /**
* 根据id删除数据
*
* @param cid
* @return
*/
public int delete(int cid) {
String sql = "delete from Commod where cid=?";
Object[] in = {cid};
return DBUtil2.executeUpdate(sql, in);
} /**
* 根据cid修改数据
* @param cname
* @param cprice
* @param cdetail
* @param cid
* @return
*/
public int update(String cname, double cprice, String cdetail,int cid){
String sql = "update Commod set cname=?, cprice=?,cdetail=? where cid=?";
Object[] in={cname,cprice,cdetail,cid};
return DBUtil2.executeUpdate(sql,in);
}
}

bo层:

package com.hexianwei.bo;

import com.hexianwei.dao.CommodDao;
import com.hexianwei.vo.Commod; import java.util.List; public class CommodBo {
CommodDao cdao = new CommodDao(); /**
* 查询
* @return
*/
public List<Commod> getAll(){
return cdao.getAll();
} /**
* 添加
* @param cname
* @param cprice
* @param cdetail
* @return
*/
public int insert(String cname, double cprice, String cdetail){
return cdao.insert(cname,cprice,cdetail);
} /**
* 删除
* @param cid
* @return
*/
public int delete(int cid){
return cdao.delete(cid);
} /**
* 修改
* @param cname
* @param cprice
* @param cdetail
* @param cid
* @return
*/
public int update(String cname, double cprice, String cdetail,int cid){
return cdao.update(cname,cprice,cdetail,cid);
}
}

控制层:

package com.hexianwei.control;

import com.hexianwei.bo.CommodBo;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException; @WebServlet(name = "Commod")
public class Commod extends HttpServlet {
CommodBo cbo = new CommodBo();
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setCharacterEncoding("utf-8");
response.setContentType("text/html;charset=utf-8");
String action = request.getParameter("action");
if (action.equals("getAll")) {
getAll(request, response);
}else if(action.equals("insert")){
insert(request,response);
}else if(action.equals("delete")){
delete(request,response);
}else if(action.equals("update")){
update(request,response);
}
} protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
} /**
* 查询
*
* @param response
*/
public void getAll(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
request.setAttribute("list",cbo.getAll());
request.getRequestDispatcher("index.jsp").forward(request,response);
} /**
* 添加
* @param request
* @param response
*/
public void insert(HttpServletRequest request, HttpServletResponse response) throws IOException {
String cname = request.getParameter("cname");
double cprice = Double.parseDouble(request.getParameter("cprice"));
String cdetail = request.getParameter("cdetail");
int i = cbo.insert(cname,cprice,cdetail);
if (i>0){
response.sendRedirect("Commod?action=getAll");
}
} /**
* 删除
* @param request
* @param response
*/
public void delete(HttpServletRequest request, HttpServletResponse response) throws IOException {
int cid = Integer.parseInt(request.getParameter("cid"));
int i = cbo.delete(cid);
if (i>0){
response.sendRedirect("Commod?action=getAll");
}
} /**
* 修改
* @param request
* @param response
*/
public void update(HttpServletRequest request, HttpServletResponse response) throws IOException {
String cname = request.getParameter("cname");
double cprice = Double.parseDouble(request.getParameter("cprice"));
String cdetail = request.getParameter("cdetail");
int cid = Integer.parseInt(request.getParameter("cid"));
int i = cbo.update(cname,cprice,cdetail,cid);
if (i>0){
response.sendRedirect("Commod?action=getAll");
}
}
}

jsp界面:

<%--
Created by IntelliJ IDEA.
User: 猴赛雷
Date: 2018/9/15
Time: 7:22
To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<%@taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<html>
<head>
<title>$Title$</title>
<style>
a{
text-decoration: none;
}
#div1{
width: 80%;
margin: 0 auto;
}
#table1{
width: 100%;
border-collapse: collapse;
text-align: center;
}
</style>
</head>
<body>
<div id="div1">
<table id="table1" border="1">
<tr>
<th>CID</th>
<th>商品名称</th>
<th>商品价格</th>
<th>商品详情</th>
<th>操作</th>
</tr>
<c:forEach var="getAll" items="${list}">
<tr>
<td>${getAll.cid}</td>
<td>${getAll.cname}</td>
<td>${getAll.cprice}</td>
<td>${getAll.cdetail}</td>
<td>
<a href="/Commod?action=delete&cid=${getAll.cid}">
<button class="del">删除</button>
</a>
<button class="etid">编辑</button>
</td>
</tr>
</c:forEach>
</table>
<fieldset id="f">
<legend>添加/修改</legend>
<form id="form1" action="" method="post">
<input id="cid" type="hidden" name="cid">
<label for="cname">商品名称</label>
<input id="cname" type="text" name="cname" required><br/>
<label for="cprice">商品价格</label>
<input id="cprice" type="text" name="cprice" required><br/>
<label for="cdetail">商品详情</label>
<input id="cdetail" type="text" name="cdetail" required><br/>
<button id="butAdd">添加</button>
<button id="butUp">修改</button>
</form>
</fieldset>
</div>
<script src="js/jquery-1.11.3.min.js"></script>
<script>
$("#table1").on("click",".del",function () {
if (confirm("您确定要删除吗?")) {
return true;
}else {
return false;
}
});
//添加按钮
$("#butAdd").click(function () {
document.getElementById("form1").action="Commod?action=insert";
$(this).submit();
});
//修改按钮
$("#butUp").click(function () {
if ($("#cid")!="") {
document.getElementById("form1").action="Commod?action=update";
$(this).submit();
}else{
alert("请选择您要修改的商品");
}
});
$("#table1").on("click",".etid",function () {
var td = this.parentNode.parentNode.childNodes;
$("#cid").val(td[1].innerText);
$("#cname").val(td[3].innerText);
$("#cprice").val(td[5].innerText);
$("#cdetail").val(td[7].innerText);
});
</script>
</body>
</html>

效果如下:

下载源码:https://pan.baidu.com/s/1NJpbStu36KkT0Urj_LFLzQ

数据库web项目对数据库的操作的更多相关文章

  1. linux 服务器部署的web项目存入数据库的时间不正确

    在linux获取当前时间 date 获取的时间是正常的 ----- java写了个测试类 public class TestDate { public static void main(String[ ...

  2. Azure Storage 系列(二) .NET Core Web 项目中操作 Blob 存储

    一,引言 上一篇文章,我们介绍到在实际项目中系统会产生大量的日志文件,用户上传的头像等等,同时也介绍到可以使用Azure Blob Storage 来存储项目中的一些日志文件,用户头像,用户视频等等. ...

  3. 在Linux上部署Web项目

    You believe it or not there is a feeling, lifetime all not lost to time. 在Linux上部署Web项目 这个是普通的web项目, ...

  4. 小型web项目的模块化(转)

    背景   目前团队中新的 Web 项目基本都采用了 Vue 或 React ,加上 RN,这些都属于比较重量级的框架,然而对于小型 Web 页面,又显得过大.早期的一些项目则使用了较原始的 HTML ...

  5. 在.net core web 项目中操作MySql数据库(非ORM框架,原生sql语句方式)

    本案例通过MySql.Data和Dapper包执行原生sql,实现对数据库的操作. 操作步骤: 第1步:在MySql数据库中新建表User(使用Navicat For MySql工具) 建表语句: c ...

  6. 真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql数据库、IK中文分词器配置以及web项目中solr的应用(1)

    版权声明:本文为博主原创文章,转载请注明本文地址.http://www.cnblogs.com/o0Iris0o/p/5813856.html 内容介绍: 真分布式SolrCloud+Zookeepe ...

  7. 三、自动化测试平台搭建-django-如何用mysql数据库做web项目

    从这节开始到后面说的大概内容如下: 这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询..),视图(请求,响应,cookie,session..),模板(验证码, ...

  8. 一个Web项目中实现多个数据库存储数据并相互切换用过吗?

    最近公司一个项目需要连接多个数据库(A和B)操作,根据不同的业务模块查询不同的数据库,因此需要改造下之前的spring-mybatis.xml配置文件以及jdbc.properties配置文件,项目后 ...

  9. Java Web项目中连接Access数据库的配置方法

    本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...

随机推荐

  1. Flutter实战视频-移动电商-49.详细页_Stack制作底部工具栏

    49.详细页_Stack制作底部工具栏 一直悬浮在最下面的 Stack层叠组件.里面用Row 可以横向布局 开始 stack如果想定位就要用position去定位. 修改return返回值的这个地方 ...

  2. ASP.NET学习笔记(一)相关概念

    ASP.NET 是一个开发框架,用于通过 HTML.CSS.JavaScript 以及服务器脚本来构建网页和网站. ASP.NET 支持三种开发模式: Web Pages MVC Web Forms ...

  3. F#周报2019年第20期

    新闻 2019年理事会活动 "实用的F#挑战"意见截止日期接近,不要忘记提交博客文章或者其它作品 接口中的默认实现 .NET Core 3.0里的性能增强 使用Try .NET创建 ...

  4. Swift3.0 Set

    set的简单的使用方法 //创建一个空set var letters = Set<Character>() //数组字面量创建set,只能存放string var setColors:Se ...

  5. HTTP请求信息和响应信息的格式

    请求: (1)请求行信息 Request URL: 发起请求的路径 Request Method:请求的方式(get  post  head put  delete  trace  options等) ...

  6. U3D开发性能优化笔记(待增加版本.x)

    http://blog.csdn.net/kaitiren/article/details/45071997 此总结由自己经验及网上收集整理优化内容 包括: .代码方面: .函数使用方面: .ui注意 ...

  7. 使用MethodSwizzle导致按home app进入后台或者app间切换发生crash的解决方法

    参考文章: 1.http://blog.csdn.net/alincexiaohao/article/details/45913857 2.http://www.cocoachina.com/ios/ ...

  8. iphone、ipad等网页中电话号码呈蓝色的解决方案

    iPhone手机.ipad上的浏览器(如Safari),在解析网页的时候会自动给 像是电话号码的数字 加上link样式,所以号码呈蓝色. 可以添加下面的meta禁用掉这个功能. <meta na ...

  9. BZOJ1415(期望dp)

    解法: 首先bfs预处理go数组:可可在j点时聪聪在点i是怎样贪心走的,这是为了之后O(1)获取转移线路. 然后dfs记忆化一下f[i][j],代表从i到j的期望,对于每层:将所有情况的期望值相加.边 ...

  10. ubuntu快捷键收集

    Ctrl+Alt+T 终端 -Ctrl+Shift+C 终端复制 -Ctrl+Shift+V 终端粘贴 -Ctrl+L 清屏 -Ctrl+; 从剪切板中获得输入提示(不小心点到被诡异的提示吓到了) - ...