写了一个简易的展示电脑商品列表的程序,用到了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("出错了");
}
}
}