JDBC-Druid增删改查

由于刚学完JDBC,所以来小练一下,通过Druid实现对数据库的增删改查操作

(现在是真正简单的纯数据库操作,等我学过前端,再做一个比较具体的!)

•数据库

新建一个数据库tb,创建brand表,有主键,品牌名,公司名,排序,描述,状态属性。

并插入三条信息(为防止主键id错乱,使用自动生成,即不写默认从1开始依次增加)

CREATE DATABASE  IF NOT EXISTS tb;
USE tb;

-- 建表
CREATE TABLE brand(
    id  INT PRIMARY KEY AUTO_INCREMENT, -- 主键,自动生成
    brand_name VARCHAR(20),             -- 品牌名
    company_name VARCHAR(20),           -- 公司名
    ordered INT,                        -- 排序
    description VARCHAR(100),           -- 商品描述
    statu INT                           -- 状态 0:禁用 1:启用
);

-- 添加数据
INSERT INTO brand (brand_name,company_name,ordered,description,statu) VALUES
("三只松鼠", "三只松鼠股份有限公司", 5, "好吃不上火", 0),
("华为", "华为有限公司", 100, "华为华为华为",1),
("小米", "小米科技有限公司", 50, "are you ok?",1);

•代码

•创建品牌类

首先,先创建一个brand类(so easy),记得重写一下toString方法方便输出

package JDBCtest;

/*
 * 品牌
 */

public class Brand {

    // id 主键
    private int id;
    // 品牌名
    private String brand_name;
    // 公司名
    private String company_name;
    // 排序
    private int ordered;
    // 描述
    private String description;
    // 状态 0:禁用 1:启用
    private Integer statu;// 包装类默认为null,不会影响数据, 建议使用包装类

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

    public void setBrand_name(String brand_name) {
        this.brand_name = brand_name;
    }

    public void setCompany_name(String company_name) {
        this.company_name = company_name;
    }

    public void setOrdered(int ordered) {
        this.ordered = ordered;
    }

    public void setDescription(String description) {
        this.description = description;
    }

    public void setStatu(Integer statu) {
        this.statu = statu;
    }

    public int getId() {
        return id;
    }

    public String getBrand_name() {
        return brand_name;
    }

    public String getCompany_name() {
        return company_name;
    }

    public int getOrdered() {
        return ordered;
    }

    public String getDescription() {
        return description;
    }

    public Integer getStatu() {
        return statu;
    }

    @Override
    public String toString() {
        String s = "Brand{" + "id=" + id + ",brand_name=" + brand_name + ",company_name=" + company_name + ",ordered="
                + ordered + ",description" + description + ",status=" + statu + "}";
        return s;
    }
}

•增删改查操作

重头戏开始,其实四个操作代码差不多,主要是sql语句不同,具体步骤如下:

1. 加载Connection

  •加载配置文件

  •获取连接池对象

  •获取数据库连接

2.Sql语句

3. 获取PreparedStatement对象

4. 设置参数

5. 执行Sql语句

6. 处理结果

7. 释放资源

    •先以查询brand表全部数据为例:

上一篇博客已经给出加载Connection的代码,这里就不再多说。

使用PreparedStatement对象是为了防止SQL注入,也已经熟练使用了。

所以这个操作就是前几篇博客的一个综合运用。

    查询全部 Select * from brand

    /*
     * 查询全部
     */
    public static void SelectAll() throws Exception {

        // 1.加载connection
        // 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("druid.properties"));
        // 获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        // 获取数据库连接
        Connection conn = dataSource.getConnection();

        // 2.SQL语句
        String sql = "Select * from brand";

        // 3.获取preparedStatement对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        // 4.设置参数
          //虽然这个查询不需要设置参数

        // 5.执行SQL
        ResultSet rs = pstmt.executeQuery();

        // 6.处理结果
        ArrayList<Brand> alist = new ArrayList<Brand>();
        while (rs.next()) {
            Brand b = new Brand();
            b.setId(rs.getInt(1));
            b.setBrand_name(rs.getString(2));
            b.setCompany_name(rs.getString(3));
            b.setOrdered(rs.getInt(4));
            b.setDescription(rs.getString(5));
            b.setStatu(rs.getInt(6));
            alist.add(b);
        }
        for (Brand b : alist) {
            System.out.println(b.toString());
        }

        // 7.释放资源
        rs.close();
        pstmt.close();
        conn.close();

    }

结果:

   •添加数据:

和上述步骤相同,改变Sql语句,添加数据:Insert into brand(brand_name,company_name,ordered,description,statu) values(?,?,?,?,?)

注意id是自动生成,所以这里不写id(默认补充),从brand_name开始,接下来给preparedStatement对象使用setXxx()方法设置参数

    /*
     * 增
     */
    public void Addtest() throws Exception {
        // 1.加载connection
        // 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("druid.properties"));
        // 获取数据库连接池
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        // 获取conn
        Connection conn = dataSource.getConnection();

        // 2.SQL语句
        String sql = "Insert into brand(brand_name,company_name,ordered,description,statu) values(?,?,?,?,?)";

        // 3.获取pstmt
        PreparedStatement pstmt = conn.prepareStatement(sql);
        // 完善sql语句
        Scanner sc = new Scanner(System.in);

        String bname = sc.next();
        String cname = sc.next();
        int ordered = sc.nextInt();
        String description = sc.next();
        int statu = sc.nextInt();
        pstmt.setString(1, bname);
        pstmt.setString(2, cname);
        pstmt.setInt(3, ordered);
        pstmt.setString(4, description);
        pstmt.setInt(5, statu);

        // 4.执行sql
        pstmt.executeUpdate();
        SelectAll();

        // 5.释放资源
        pstmt.close();
        conn.close();
    }

例:添加一条(香飘飘,香飘飘,2,绕地球3圈,0)

再增一条(华米,华米,1,华为和小米,1)

查看数据库

 

     •删除数据:

删除数据:delete from brand where id=?

这里是用id删除,也可以换成其他属性

/*
     * 删
     */
    public void DeleteTest() throws Exception {
        // 1.加载connection
        // 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("druid.properties"));
        // 获取数据库连接池
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        // 获取conn
        Connection conn = dataSource.getConnection();

        // 2.sql语句
        String sql = "delete from brand where id=?";

        // 3.创建pstmt
        PreparedStatement pstmt = conn.prepareStatement(sql);
        Scanner sc = new Scanner(System.in);
        int num = sc.nextInt();
        pstmt.setInt(1, num);

        // 4.执行sql
        pstmt.executeUpdate();
        SelectAll();

        // 5.释放资源
        pstmt.close();
        conn.close();
    }

删除id=4

 

   •修改数据:

利用主键修改其余信息:Update brand set brand_name=? ,company_name=?,ordered=?,description=?,statu=? where id =?

将(华为,华为有限公司,100,华为华为华为,1)改为(华为,华为科技有限公司,20,这是华为,1)

public void UpdateTest() throws Exception {
        // 1.加载connection
        // 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("druid.properties"));
        // 创建连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        // 创建数据库连接
        Connection conn = dataSource.getConnection();

        // 2.Sql语句
        String sql = "Update brand set brand_name=? ,company_name=?,ordered=?,description=?,statu=? where id =?";
        // 3.创建pstmt
        PreparedStatement pstmt = conn.prepareStatement(sql);
        // 4.设置参数
        Scanner sc = new Scanner(System.in);
        int id = sc.nextInt();
        pstmt.setInt(6, id);
        String bname = sc.next();
        String cname = sc.next();
        int ordered = sc.nextInt();
        String description = sc.next();
        int statu = sc.nextInt();
        pstmt.setString(1, bname);
        pstmt.setString(2, cname);
        pstmt.setInt(3, ordered);
        pstmt.setString(4, description);
        pstmt.setInt(5, statu);
        // 5.执行sql
        pstmt.executeUpdate();
        SelectAll();
        // 6.释放资源
        pstmt.close();
        conn.close();
    }

 •模糊查询:

模糊查询我做的是品牌名的模糊查询,也可以改成其他或者多个属性的

模糊查询:Select * from brand where brand_name like ?

注意模糊查询时 %要放在setXxx()方法里!(这里我就错了,后来百度出来的....)

public void SelectTest() throws Exception {
        // 1.加载connection
        // 加载配置文件
        Properties prop = new Properties();
        prop.load(new FileInputStream("druid.properties"));
        // 获取连接池对象
        DataSource dataSource = DruidDataSourceFactory.createDataSource(prop);
        // 获取数据库连接
        Connection conn = dataSource.getConnection();

        // 2.SQL语句
        String sql = "Select * from brand where brand_name like ?";

        // 3.获取preparedStatement对象
        PreparedStatement pstmt = conn.prepareStatement(sql);

        // 4.设置参数
        Scanner sc = new Scanner(System.in);
        String bname = sc.next();
        pstmt.setString(1, "%" + bname + "%"); //注意这里
        // 5.执行SQL
        ResultSet rs = pstmt.executeQuery();

        // 6.处理结果
        ArrayList<Brand> alist = new ArrayList<Brand>();
        while (rs.next()) {
            Brand b = new Brand();
            b.setId(rs.getInt(1));
            b.setBrand_name(rs.getString(2));
            b.setCompany_name(rs.getString(3));
            b.setOrdered(rs.getInt(4));
            b.setDescription(rs.getString(5));
            b.setStatu(rs.getInt(6));
            alist.add(b);
        }
        for (Brand b : alist) {
            System.out.println(b.toString());
        }

        // 7.释放资源
        rs.close();
        pstmt.close();
        conn.close();
    }

查询:华


 

ok!✿✿ヽ(°▽°)ノ✿结束

posted @ 2022-03-30 16:37  MMMMinoz  阅读(223)  评论(0编辑  收藏  举报