预处理Statement

什么是CRUD

CRUD 是 增删改查的英文首字母拼接 . 对应到 sql 里就是

insert/create delete/drop alter/update select/show

为什么用PreparedStatement

  1. 预编译SQL语句 , 语句固定可以复用
  2. 参数化查询 , 依靠值传递 , 有效防止传入关键字或导致sql注入的问题

源码贴在这里

java 复制代码
package com.zpero.base;

import org.junit.Test;

import java.sql.*;
import java.util.Scanner;

public class JDBCOperation {
    @Test
    public void testQuerySingleRowAndCol() throws SQLException {
        //注册驱动
        //获取连接
        Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );

        PreparedStatement ps =
                conn.prepareStatement("SELECT count(*) as Count FROM teacher");

        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getInt("Count"));

        }
        rs.close();
        ps.close();
        conn.close();

    }
    @Test
    public void testQuerySingleRow() throws Exception {
        //注册驱动
        //获取连接
        Connection conn2 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );

        PreparedStatement ps2 =
                conn2.prepareStatement("SELECT * FROM teacher where id = ?");
        ps2.setInt(1, 10);
        ResultSet rs2 = ps2.executeQuery();
        while (rs2.next()) {
            int id = rs2.getInt("id");
            String formattedId = String.format("%03d", id);
            String tname = rs2.getString("tname");
            int age = rs2.getInt("age");
            String object = rs2.getString("object");
            int salary = rs2.getInt("salary");
            String email = rs2.getString("email");
            System.out.println(formattedId + '\t' + tname + '\t' + age + '\t' + object + '\t' + salary + '\t' + email);
        }
    }

    @Test
    public void testQueryMoreRow() throws SQLException {
        //注册驱动
        //获取连接
        Connection conn3 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );

        PreparedStatement ps3 =
                conn3.prepareStatement("SELECT * FROM teacher where age > ?");
        ps3.setInt(1, 25);
        ResultSet rs3 = ps3.executeQuery();
        while (rs3.next()) {
            int id = rs3.getInt("id");
            String formattedId = String.format("%03d", id);
            String tname = rs3.getString("tname");
            int age = rs3.getInt("age");
            String object = rs3.getString("object");
            int salary = rs3.getInt("salary");
            String email = rs3.getString("email");
            System.out.println(formattedId + '\t' + tname + '\t' + age + '\t' + object + '\t' + salary + '\t' + email);

        }
        rs3.close();
        ps3.close();
        conn3.close();

    }

    @Test
    public void testInsert () throws SQLException {
        Connection conn4 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );
        PreparedStatement ps4 =
                conn4.prepareStatement("INSERT INTO teacher(id,tname,age , object ,salary , email ) VALUES (?,?,?,?,?,?)");
        ps4.setInt(1,12);  ps4.setString(2,"曼波"); ps4.setInt(3,18);
        ps4.setString(4,"体育"); ps4.setInt(5,5000); ps4.setString(6,"manbo@school.com");

        int count = ps4.executeUpdate();

        if(count > 0){
            System.out.println("success");
        }else {
            System.out.println("failed");
        }
        ps4.close();
        conn4.close();
    }
    @Test
    public void testUpdate () throws Exception {

        Connection conn5 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );

        PreparedStatement ps5 = conn5.prepareStatement("update teacher set salary = ? where tname = ?");
        ps5.setInt(1,3000);
        ps5.setString(2,"曼波");
        int count = ps5.executeUpdate();
        if(count > 0){
            System.out.println("success");
        }else {
            System.out.println("failed");
        }
        ps5.close();
        conn5.close();


    }
    @Test
    public  void testDelete () throws Exception {
        Connection conn6 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );
        PreparedStatement ps6 = conn6.prepareStatement("delete from teacher where tname = ?");
        ps6.setString(1,"曼波");
        int count = ps6.executeUpdate();
        if(count > 0){
            System.out.println("success");
        }else {
            System.out.println("failed");
        }
        ps6.close();
        conn6.close();
    }


}

@Test是 Junit 参数化测试注解 ,因此要导入 JUnit jar包 junit hamcrest jar包 hamcrest 点击jar 即可下载

同上一篇文章流程 导入lib文件库 文章链接

添加class文件 JDBCOperation

PreparedStatement查询

查询有多少条记录

java 复制代码
@Test
    public void testQuerySingleRowAndCol() throws SQLException {
        //注册驱动
        //获取连接
        Connection conn = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );

        PreparedStatement ps =
                conn.prepareStatement("SELECT count(*) as Count FROM teacher");

        ResultSet rs = ps.executeQuery();
        while (rs.next()) {
            System.out.println(rs.getInt("Count"));

        }
        rs.close();
        ps.close();
        conn.close();

    }

注册驱动被集成到了 DriverManager中 具体代码见 上一篇文章 注册驱动 部分 , 具体思路就是 Drive 类 实现了 驱动接口 , 然后在静态代码块中实现了加载时自动注册

executeQuery() 方法返回的类型是 ResultSet 类型

查询单行数据

java 复制代码
 @Test
    public void testQuerySingleRow() throws Exception {
        //注册驱动
        //获取连接
        Connection conn2 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );

        PreparedStatement ps2 =
                conn2.prepareStatement("SELECT * FROM teacher where id = ?");
        ps2.setInt(1, 10);
        ResultSet rs2 = ps2.executeQuery();
        while (rs2.next()) {
            int id = rs2.getInt("id");
            String formattedId = String.format("%03d", id);
            String tname = rs2.getString("tname");
            int age = rs2.getInt("age");
            String object = rs2.getString("object");
            int salary = rs2.getInt("salary");
            String email = rs2.getString("email");
            System.out.println(formattedId + '\t' + tname + '\t' + age + '\t' + object + '\t' + salary + '\t' + email);
        }
    }

查询多行数据

Java 复制代码
 @Test
    public void testQueryMoreRow() throws SQLException {
        //注册驱动
        //获取连接
        Connection conn3 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );

        PreparedStatement ps3 =
                conn3.prepareStatement("SELECT * FROM teacher where age > ?");
        ps3.setInt(1, 25);
        ResultSet rs3 = ps3.executeQuery();
        while (rs3.next()) {
            int id = rs3.getInt("id");
            String formattedId = String.format("%03d", id);
            String tname = rs3.getString("tname");
            int age = rs3.getInt("age");
            String object = rs3.getString("object");
            int salary = rs3.getInt("salary");
            String email = rs3.getString("email");
            System.out.println(formattedId + '\t' + tname + '\t' + age + '\t' + object + '\t' + salary + '\t' + email);

        }
        rs3.close();
        ps3.close();
        conn3.close();

    }

增加新数据

java 复制代码
  @Test
    public void testInsert () throws SQLException {
        Connection conn4 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );
        PreparedStatement ps4 =
                conn4.prepareStatement("INSERT INTO teacher(id,tname,age , object ,salary , email ) VALUES (?,?,?,?,?,?)");
        ps4.setInt(1,12);  ps4.setString(2,"曼波"); ps4.setInt(3,18);
        ps4.setString(4,"体育"); ps4.setInt(5,5000); ps4.setString(6,"manbo@school.com");

        int count = ps4.executeUpdate();

        if(count > 0){
            System.out.println("success");
        }else {
            System.out.println("failed");
        }
        ps4.close();
        conn4.close();
    }

executeUpdate() 返回 int数据 , 受影响的行数

Java 复制代码
 @Test
    public void testUpdate () throws Exception {

        Connection conn5 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );

        PreparedStatement ps5 = conn5.prepareStatement("update teacher set salary = ? where tname = ?");
        ps5.setInt(1,3000);
        ps5.setString(2,"曼波");
        int count = ps5.executeUpdate();
        if(count > 0){
            System.out.println("success");
        }else {
            System.out.println("failed");
        }
        ps5.close();
        conn5.close();


    }

java 复制代码
 @Test
    public  void testDelete () throws Exception {
        Connection conn6 = DriverManager.getConnection(
                "jdbc:mysql://localhost:3306/mssqldata",
                "root",
                "123456"
        );
        PreparedStatement ps6 = conn6.prepareStatement("delete from teacher where tname = ?");
        ps6.setString(1,"曼波");
        int count = ps6.executeUpdate();
        if(count > 0){
            System.out.println("success");
        }else {
            System.out.println("failed");
        }
        ps6.close();
        conn6.close();
    }
相关推荐
2601_962055976 小时前
跟据spring boot版本,查看对应的tomcat,并查看可支持的tomcat的版本范围
spring boot·后端·tomcat
Lost of 程序猿8 小时前
ASP.NET Core API 幂等性设计深度实战:从一次重复申领事故说起
后端·asp.net
QQ_21696290969 小时前
【源码编号:project79475】SpringBoot校内二手交易平台:商品发布、分类检索、留言交流、订单管理全流程实战
java·spring boot·后端
郑州光合科技余经理10 小时前
本地生活服务系统:模块边界与结算字段怎么拆
java·开发语言·前端·后端·系统架构·uni-app·php
IT_陈寒10 小时前
Vue的嵌套组件竟然吃掉了我的事件?
前端·人工智能·后端
大辉狼_音频架构11 小时前
进阶:从源码编译 SOF 固件与 topology
后端
大辉狼_音频架构11 小时前
上板:让 SOF 在 FRDM-i.MX8MP 上跑起来
后端
大辉狼_音频架构12 小时前
FRDM-IMX8MP UUU 烧录 eMMC 指南
后端
运行时异常13 小时前
【WMS 仓储系统集成 AI Agent 实战】第 3 讲:Spring Security 6 + JWT——addFilterBefore 一词之差,全站 401
java·后端
LinMINGJing00713 小时前
PageHeaderData:Page 的页面头
后端