数据库web项目对数据库的操作
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项目对数据库的操作的更多相关文章
- linux 服务器部署的web项目存入数据库的时间不正确
在linux获取当前时间 date 获取的时间是正常的 ----- java写了个测试类 public class TestDate { public static void main(String[ ...
- Azure Storage 系列(二) .NET Core Web 项目中操作 Blob 存储
一,引言 上一篇文章,我们介绍到在实际项目中系统会产生大量的日志文件,用户上传的头像等等,同时也介绍到可以使用Azure Blob Storage 来存储项目中的一些日志文件,用户头像,用户视频等等. ...
- 在Linux上部署Web项目
You believe it or not there is a feeling, lifetime all not lost to time. 在Linux上部署Web项目 这个是普通的web项目, ...
- 小型web项目的模块化(转)
背景 目前团队中新的 Web 项目基本都采用了 Vue 或 React ,加上 RN,这些都属于比较重量级的框架,然而对于小型 Web 页面,又显得过大.早期的一些项目则使用了较原始的 HTML ...
- 在.net core web 项目中操作MySql数据库(非ORM框架,原生sql语句方式)
本案例通过MySql.Data和Dapper包执行原生sql,实现对数据库的操作. 操作步骤: 第1步:在MySql数据库中新建表User(使用Navicat For MySql工具) 建表语句: c ...
- 真分布式SolrCloud+Zookeeper+tomcat搭建、索引Mysql数据库、IK中文分词器配置以及web项目中solr的应用(1)
版权声明:本文为博主原创文章,转载请注明本文地址.http://www.cnblogs.com/o0Iris0o/p/5813856.html 内容介绍: 真分布式SolrCloud+Zookeepe ...
- 三、自动化测试平台搭建-django-如何用mysql数据库做web项目
从这节开始到后面说的大概内容如下: 这里说的是Django做一个web项目的大概框架,从下篇具体说Django中的模型(查询..),视图(请求,响应,cookie,session..),模板(验证码, ...
- 一个Web项目中实现多个数据库存储数据并相互切换用过吗?
最近公司一个项目需要连接多个数据库(A和B)操作,根据不同的业务模块查询不同的数据库,因此需要改造下之前的spring-mybatis.xml配置文件以及jdbc.properties配置文件,项目后 ...
- Java Web项目中连接Access数据库的配置方法
本文是对前几天的"JDBC连接Access数据库的几种方式"这篇的升级.因为在做一些小项目的时候遇到的问题,因此才决定写这篇博客的.昨天已经将博客公布了.可是后来经过一些验证有点问 ...
随机推荐
- java 多线程,sleep()和wait()
java 线程可谓是java中重要的一个机制,在说线程之前需要知道什么是进程,进程和线程的关系是是什麽? 1.什么是进程?什么是线程? 进程:用句简单的粗俗的来说,进程就是程序.进程是一个正在运行的程 ...
- 洛谷 - P1414 - 又是毕业季II - 因数
https://www.luogu.org/problemnew/show/P1414 以后这种gcd的还是尽可能往分解那里想一下. 先把每个数分解,他的所有因子都会cnt+1. 然后从最大的可能因子 ...
- builtin_shaders-5.3.4f1学习-Unlit/Texture
// Unlit shader. Simplest possible textured shader. // - no lighting // - no lightmap support // - n ...
- ugui batches
先渲染非重叠,然后渲染重叠 如果两个图不是同一个图集,并且都不重叠,那么按节点挂载顺序渲染 节点挂接多复杂没关系,关键是节点在Canvas下的顺序,绑在同一节点或者全部绑在根节点Canvas下渲染 ...
- 51nod1352(exgcd)
题目链接:http://www.51nod.com/onlineJudge/questionCode.html#!problemId=1352 题意:中文题诶- 思路:exgcd 显然题目可以描述为: ...
- bzoj 3778: 共鸣【计算几何+dp】
枚举起点,然后设f[i][j]为上凸壳上一个点是i当前点是j的最大面积,g是下凸壳,然后合并的时候枚举结束点t合并上下凸壳即可 这样的好处是每次转移都是往凸多边形里加一个三角形(s,i,j),所以判断 ...
- __str__,__repr__
目录 __str__ __repr__ __str__ 打印时触发 class Foo: pass obj = Foo() print(obj) <__main__.Foo object at ...
- performSegueWithIdentifier:sender里边的sender是啥意思
performSegueWithIdentifier:sender里边的sender是啥意思啊?怎样用啊? [self performSegueWithIdentifier:@"pushSi ...
- Mysql用户root密码找回
1.本试例的环境如下: 2.mysql数据库的版本如下,此数据库运行多实例: mysql Ver 15.1 Distrib 10.2.24-MariaDB, for Linux (x86_64) us ...
- python 基础(十三) time模块
日期和时间 一.time模块 import time 时间戳: 时间戳是指格林威治时间1970年1月1日0时0分0秒至现在的秒数 s(秒).ms(毫秒).μs(微秒).ns(纳秒), 其中:1 ...