servlet+jdbc

参考:https://how2j.cn/k/servlet/servlet-eclipse/558.html?p=136471

1.JDBC
JDBC:Java DataBase Connectivity 可以为多种关系型数据库DBMS 提供统一的访问方式

具体是通过以下类/接口实现:

  • DriverManager : 管理jdbc驱动
  • Connection: 连接(通过DriverManager产生)
  • Statement(PreparedStatement) :增删改查 (通过Connection产生 )
  • ResultSet :返回的结果集 (上面的Statement产生 )

Connection产生操作数据库的对象:

  • Statement对象:createStatement()
  • PreparedStatement对象:prepareStatement()
    推荐使用PreparedStatement:
    • 编码更加简便(避免了字符串的拼接)
    • 提高性能(因为 有预编译操作,预编译只需要执行一次)
    • 安全(可以有效防止sql注入)

Statement操作数据库:

  • 增删改:executeUpdate()
  • 查询:executeQuery();

ResultSet 保存结果集 select * from xxx

  • next():光标下移,判断是否有下一条数据;true/false
  • previous(): true/false
  • getXxx(字段名|位置):获取具体的字段值 ,位置从1开始计数

jdbc访问数据库的具体步骤:

  • a.导入驱动,加载具体的驱动类
  • b.与数据库建立连接
  • c.发送sql,执行
  • d.处理结果集 (查询)

2.示例

DAO层:使用ORM技术实现具体的数据库操作,比如查询某个id的数据,插入1条数据等

使用时只要new一个对象然后调用对应的方法即可

public class HeroDAO {
    // 构造方法中导入jar包:mysql驱动
    public HeroDAO(){
        try{
            Class.forName("com.mysql.jdbc.Driver");
        }catch (ClassNotFoundException e){
            e.printStackTrace();
        }
    }

    // 该方法返回管理jdbc驱动的对象
    public Connection getConnection() throws SQLException {
        return DriverManager.getConnection("jdbc:mysql://127.0.0.1:3306/student_sys?characterEncoding=UTF-8",
                "kzzf","123456");
    }

    // 获取所有数据的方法
    public List<Hero> list(){
        List<Hero> heros = new ArrayList<>();
        String sql = "select * from hero";
        // 建立连接,创建执行sql语句的对象
        try(Connection c = getConnection();Statement s = c.createStatement()){
            ResultSet rs = s.executeQuery(sql);  // 执行查询语句,获取ResultSet对象
            while (rs.next()){
                Hero h = new Hero();  // 创建一个Hero对象接收数据,数字代表第几列
                h.id = rs.getInt(1);
                h.name = rs.getString(2);
                h.hp = rs.getFloat(3);
                h.damage = rs.getInt(4);
                heros.add(h);
            }
        }catch (SQLException e){
            e.printStackTrace();
        }
        return heros;
    }

    public void add(Hero hero){
        String sql = "insert into hero values(?,?,?,?)";
        // 使用PreparedStatement对象执行sql语句,该方法是预编译的,所以可以预防sql注入
        // 推荐使用PreparedStatement对象,可以用类似格式化的方法插入数据
        try(Connection c = getConnection();PreparedStatement ps = c.prepareStatement(sql)){
            ps.setInt(1,hero.id);
            ps.setString(2,hero.name);
            ps.setFloat(3,hero.hp);
            ps.setInt(4,hero.damage);
            ps.execute();
        }catch (SQLException e){
            e.printStackTrace();
        }
    }
}

3.控制层

public class HeroAddServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response)
            throws IOException {
        request.setCharacterEncoding("UTF-8");
        Hero hero = new Hero();
        // 获取前端传递的数据,并转为指定类型
        hero.setName(request.getParameter("name"));
        hero.setHp(Float.parseFloat(request.getParameter("hp")));
        hero.setDamage(Integer.parseInt(request.getParameter("damage")));

        new HeroDAO().add(hero);  // 调用dao层中的方法插入数据
        response.sendRedirect("/heros");
    }
}

4.接收前端传递的json格式参数

public class SubmitServlet extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
        String data = request.getParameter("data");  //获取前端提交的字符串参数
        JSONObject json = JSONObject.fromObject(data);  // 转json对象
        Hero hero = (Hero) JSONObject.toBean(json,Hero.class);  // 转java对象
    }
}

5.返回json格式参数

public class GetHeros extends HttpServlet {
    public void service(HttpServletRequest request, HttpServletResponse response) throws IOException {
        List<Hero> heros = new ArrayList<>();
        for(int i=0;i<10;i++){
            Hero h = new Hero();
            h.setName("盖伦");
            h.setHp(500);
            heros.add(h);
        }
        // 先序列化为json对象,再转字符串
        String result = JSONSerializer.toJSON(heros).toString();
        response.setContentType("text/html;charset=UTF-8");
        response.getWriter().println(result);
    }
}

6.web.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
    <servlet>
        <servlet-name>HeroAddServlet</servlet-name>
        <servlet-class>HeroAddServlet</servlet-class>
    </servlet>

    <servlet-mapping>
        <servlet-name>HeroAddServlet</servlet-name>
        <url-pattern>/addHero</url-pattern>
    </servlet-mapping>
</web-app>
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值