一个简易的jdbc的使用

写了一个简易的展示电脑商品列表的程序,用到了jdbc实现java和mysql数据库的交互。

功能简介: 首先进入index.html页面,会显示进入商品展示的连接,点击进入后会显示商品信息,商品信息上有添加按钮,点击添加按钮会进入添加商品的页面,输入商品信息点击提交按钮后,会显示新的商品列表。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

代码实现分析: ①computer类定义了存储商品的信息格式②index.html页面转到商品展示类(computerlist)③computerlist类里面会进入到获取数据库的类(computerdao)和用来打印商品信息的类(showcomputer)④showcomputer里面会有添加商品的连接,点击之后就会进入添加商品的页面(addcomputer.html)⑤商品页面点击提交按钮会进入获取新添商品信息的类(addcomputer),在这个类获取新添商品信息后,进入商品展示类(computerlist)打印数据库中商品信息。⑥有一个jdbcutil工具类,用来存放数据库连接关闭的操作,简化了computerdao类中的代码

jdbcutil工具类

package util;

import java.io.IOException;
import java.sql.*;

public class JdbcUtil {
    public  Connection getConnection(){
        Connection root = null;
        try {
            Class.forName("com.mysql.jdbc.Driver");//连接数据库
            root = DriverManager.getConnection("jdbc:mysql://localhost:3306/computershop" +
                    "?characterEncoding=utf-8", "root", "");//数据库的目录
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
        } catch (SQLException e){
            e.printStackTrace();
        }
        return root;
    }

    public void close(ResultSet resultSet, Connection connection, PreparedStatement preparedStatement){
        try {
            if(resultSet!=null){
                resultSet.close();
            }
            if(connection!=null){
                connection.close();
            }
            if(preparedStatement!=null){
                preparedStatement.close();
            }
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
    }
}

computer类

package entity;
public class Computer {
    private int id;//定义了电脑商品的一些属性
    private String name;
    private double prices;
    private String type;

    public int getId() {
        return id;
    }

    public void setId(int id) {
        this.id = id;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public double getPrices() {
        return prices;
    }

    public void setPrices(double prices) {
        this.prices = prices;
    }

    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }
}

index.html页面

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<a href="ComputerList?type=lenovo">转到电脑列表页</a>
</body>
</html>
<!--这里我们假设指定查询的电脑品牌是lenovo,一般用post发送更安全-->

ComputerList代码

package four;

import dao.ComputerDao;
import entity.Computer;

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;
import java.util.ArrayList;
import java.util.List;

@WebServlet("/ComputerList")
public class ComputerList extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        //查询电脑列表
        //转到另外一个servlet展示
        String type = req.getParameter("type");//获取表单中的电脑类型
        ComputerDao cd = new ComputerDao();
        List<Computer> computers = cd.getComputerList(type);//得到数据库
        //中的computer数据
        //转到另外的servlet展示
        req.setAttribute("computer",computers);//将computer存起来
        req.getRequestDispatcher("ShowComputer").forward(req,resp);
        //这里要用请求转发,用重定向无法获取request里面的东西
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doGet(req,resp);
    }
}

ComputerDao代码

package dao;

import entity.Computer;
import util.JdbcUtil;

import java.sql.*;
import java.util.ArrayList;
import java.util.List;

public class ComputerDao {//获取数据库中的数据
    public List<Computer> getComputerList(String type){
        List<Computer> computers = new ArrayList<Computer>();
        //定义一个list集合存数据库中的数据
        try {
        //利用我们写好的工具类,简化数据库连接的操作
            Connection root = new JdbcUtil().getConnection();
            //写查询语句
            String sql="select * from computer where type = ?";
            PreparedStatement ps = root.prepareStatement(sql);
            ps.setString(1,type);//设置传参类型,参数是什么类型set..后就填什么类型,从下标1开始(对应上面?)
            ResultSet resultSet = ps.executeQuery();//注意这里括号里不能写sql
            while (resultSet.next()){
            //读取数据库里的数据,添加到上面定义的list集合里面
                Computer co = new Computer();
                co.setId(resultSet.getInt("id"));
                co.setName(resultSet.getString("name"));
                co.setPrices(resultSet.getDouble("prices"));
                co.setType(resultSet.getString("type"));
                computers.add(co);
            }
            new JdbcUtil().close(resultSet,root,ps);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return computers;//返回集合
    }
    public int addComputer(String name,double prices,String type){
        //获取连接
        int num=0;
        try {
            Connection root1 = new JdbcUtil().getConnection();
            String sql="insert into computer(name,prices,type) values(?,?,?)";//插入的sql,将数据插入到数据库中
            PreparedStatement ps = root1.prepareStatement(sql);
            ps.setString(1,name);
            ps.setDouble(2,prices);
            ps.setString(3,type);
            num = ps.executeUpdate();//返回值是int类型
            new JdbcUtil().close(null,root1,ps);
        } catch (SQLException throwables) {
            throwables.printStackTrace();
        }
        return num;//返回影响的行数
    }
}

ShowComputer代码

package four;

import entity.Computer;

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;
import java.io.PrintWriter;
import java.util.List;

@WebServlet("/ShowComputer")
public class ShowComputer extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    //设置编码的格式为utf-8
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        List<Computer> computers = (List<Computer>) req.getAttribute("computer");//从商品展示类attribute里面获取computer集合
        PrintWriter pw = resp.getWriter();
        //写一个连接,用于添加商品
        pw.println("<a href='addComputer.html'>添加</a>");
        //循环打印
        for (Computer c : computers) {
            pw.println("电脑信息"+c.getId()+"--"+c.getName()+"--"+c.getPrices()+"--"+c.getType()+"<br/>");
        }
    }

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
      doGet(req,resp);
    }
}

addComputer页面

<!--用于添加新商品的html页面-->
<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Title</title>
</head>
<body>
<form action="addComputer" method="post">
    电脑名字<input type="text" name="name">
    <br/>
    价格<input type="text" name="price">
    <br/>
    品牌<input type="text" name="type">
    <br/>
    <input type="submit" value="提交">
</form>
</body>
</html>

addComputer代码

package four;

import dao.ComputerDao;

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("/addComputer")
public class addComputer extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        doPost(req, resp);
    }

    @Override
    //是post请求过来的需要注意
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        req.setCharacterEncoding("utf-8");
        resp.setCharacterEncoding("utf-8");
        resp.setContentType("text/html;charset=utf-8");
        //获取用户填的信息
        String name = req.getParameter("name");
        String prices = req.getParameter("price");
        String type = req.getParameter("type");
        System.out.println(prices);
        System.out.println(name);
        //获取函数的返回值(影响数据库的行数)
        int num = new ComputerDao().addComputer(name,Double.parseDouble(prices),type);
        if(num==1){//如果影响了一行,表示成功,进入商品展示列表
            resp.sendRedirect("ComputerList");
        }else {//如果不是1表示出错,打印在页面上
            resp.getWriter().println("出错了");
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值