数据库web项目对数据库的操作

Posted 笔记

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了数据库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;
    }
}
View Code

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;
    }
}
View Code

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);
    }
}
View Code

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);
    }
}
View Code

控制层:

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");
        }
    }
}
View Code

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数据库web项目对数据库的操作

centos 7部署并汉化Gitlab及基础操作

关于打开一个新活动以响应对片段内的 RecyclerView 项目的点击

maven web项目的web.xml报错The markup in the document following the root element must be well-formed.(代码片段

使用触发器对学生表操作进行日志记录

高效Web开发的10个jQuery代码片段