Servelt查询

Servlet文章目录

一、Servlet查询
二、Servlet增加
三、Servlet删除
四、Servelt修改
五、Servlet提交数据
六、Servlet获取对象



Servlet查询

Servlet学习笔记


一、创建数据库

--id设置为主键,自增,不为空
create database Hero;
go
use Hero;
go
create table hero
(
	id int primary key not null identity(1,1),
	name varchar(30),
	hp float,
	damage int,
)

二、创建Servlet

1.创建DAO

在src下创建一个dao包然后创建HeroDAO
使用的是Server-SQL,注意DAO的函数中无法设置null,top后面无法使用占位符

package com.dao;

import com.entity.Hero;

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

/**
 * @ClassName $HeroDAO
 * @Author $童一
 * @Description $
 * @Param $
 * @return $
 * @Date $ $
 **/

public class HeroDAO {
    //加载数据库
    public HeroDAO() {
        try {
            Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            System.out.println("加载数据库失败");
        }
    }
	//连接数据库,Server-SQL的端口为1433,MySQL的端口为3306
    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection("jdbc:sqlserver://localhost:1433; DatabaseName=Hero", "sa", "tmj20000509");
    }
	//获取总数
    public int getTotal() {
        int total = 0;
        try (Connection conn = getConnection(); Statement s = conn.createStatement();) {
            String sql = "select count(*) from hero";
            ResultSet rs = s.executeQuery(sql);
            while (rs.next()) {
                total = rs.getInt(1);
            }
            System.out.println("Total:" + total);
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return total;
    }
	//增加,这里的values中id因为为自增,不能设置
    public void add(Hero hero) {
        String sql = "insert into hero values(?,?,?)";
        try (Connection conn = getConnection(); PreparedStatement ps = conn.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS);) {
            ps.setString(1, hero.name);
            ps.setFloat(2, hero.hp);
            ps.setInt(3, hero.damage);
            ps.execute();
            //获取自增主键
            ResultSet rs = ps.getGeneratedKeys();
            if (rs.next()) {
                int id = rs.getInt(1);
                hero.id = id;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //更新
    public void update(Hero hero) {
        String sql = "update hero set name = ?,hp = ?, damage = ? where id = ?";
        try (Connection conn = getConnection(); PreparedStatement ps = conn.prepareStatement(sql);) {
            ps.setString(1, hero.name);
            ps.setFloat(2, hero.hp);
            ps.setInt(3, hero.damage);
            ps.setInt(4, hero.id);
            ps.execute();
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
	//通过id进行删除
    public void delete(int id) {
        try (Connection conn = getConnection(); Statement s = conn.createStatement();) {
            String sql = "delete from hero where id = " + id;
            s.execute(sql);
        } catch (SQLException e) {
            e.printStackTrace();
        }
    }
    //通过id获取该hero的数据
    public Hero get(int id) {
        Hero hero = null;
        try (Connection conn = getConnection(); Statement s = conn.createStatement();) {
            String sql = "select * from hero where id =" + id;
            ResultSet rs = s.executeQuery(sql);
            if (rs.next()) {
                hero = new Hero();
                String name = rs.getString(2);
                float hp = rs.getFloat("hp");
                int damage = rs.getInt(4);
                hero.name = name;
                hero.hp = hp;
                hero.damage = damage;
                hero.id = id;
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return hero;
    }

    public List<Hero> list() {
        return list(1, Short.MAX_VALUE);
    }
    //使用max进行分页查询
    public List<Hero> list(int start, int count) {
        List<Hero> heros = new ArrayList<Hero>();
        //Server-SQL top后面不能跟?当作占位符
        String sql = "select top " + count + " * from hero where id>=(select max(id)from (select top " + start + " id from hero order by id)temp)";
        //String sql = "select * from (select ROW_NUMBER() over(order by id asc)as rowid,* from hero)t where t.rowid>? and t.rowid<=?";
        try (Connection c = getConnection(); PreparedStatement ps = c.prepareStatement(sql);) {
            ResultSet rs = ps.executeQuery();
            while (rs.next()) {
                Hero hero = new Hero();
                int id = rs.getInt(1);
                String name = rs.getString(2);
                float hp = rs.getFloat("hp");
                int damage = rs.getInt(4);
                hero.id = id;
                hero.name = name;
                hero.hp = hp;
                hero.damage = damage;
                heros.add(hero);
            }
        } catch (SQLException e) {
            e.printStackTrace();
        }
        return heros;
    }
}

2.创建实体类

在src下建立entity包,创建Hero类

package com.entity;

/**
 * @ClassName Hero
 * @Author 童一$童一
 * @Description $
 * @Param $
 * @return $
 * @Date $ $
 **/

public class Hero {
    public int id;
    public String name;
    public float hp;
    public int damage;

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

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

    public void setHp(float hp) {
        this.hp = hp;
    }

    public void setDamage(int damage) {
        this.damage = damage;
    }

    public int getId() {
        return id;
    }

    public String getName() {
        return name;
    }

    public float getHp() {
        return hp;
    }

    public int getDamage() {
        return damage;
    }
}

3.创建HeroListServlet

在src下建立Servlet包,创建HeroListServlet类用于查询所有的数据

package com.servlet;

import com.dao.HeroDAO;
import com.entity.Hero;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

public class HeroListServlet extends HttpServlet {
    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        //获取数据库中所有的数据
        List<Hero> heros = new HeroDAO().list();
        StringBuffer sb = new StringBuffer();
        int total = new HeroDAO().getTotal();
        //创建一个表格用于显示数据,使用StringBUffer方便修改
        sb.append("<table align='center' border='1' cellspacing='1'>\r\n");
        sb.append("<tr><td>id</td><td>name</td><td>hp</td><td>damage</td><td>delete</td><td>edit</td></tr>\r\n");
        String trFormat = "<tr><td>%d</td><td>%s</td><td>%f</td><td>%d</td><td><a href='deleteHero?id=%d'>删除</a></td>" +
                "<td><a href='updateHero?id=%d'>修改</a></td></tr>\r\n";
        for (Hero hero : heros) {
            String str = String.format(trFormat, hero.getId(), hero.getName(), hero.getHp(), hero.getDamage(), hero.getId(),hero.getId());
            sb.append(str);
        }
        String str1 = "<tr><td colspan='3'>Total: </td><td colspan='2'>%d</td></tr>";
        String str2 = String.format(str1,total);
        sb.append(str2);
        sb.append("</table>");
        response.getWriter().write(sb.toString());
    }
}

3.配置web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">

    <servlet>
        <servlet-name>HeroListServlet</servlet-name>
        <servlet-class>com.servlet.HeroListServlet</servlet-class>
    </servlet>
    <servlet-mapping>
        <servlet-name>HeroListServlet</servlet-name>
        <url-pattern>/listHero</url-pattern>
    </servlet-mapping>
<web-app>

总结

启动tomcat,访问http://localhost:8080/ServletCRUD/listHero
HeroListServlet通过HeroDAO()中的list方法获取所有数据并以表格的形式显示

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值