JavaWeb | JDBC相关API详解 2 (内附以集合形式输出表)

本专栏主要是记录学习完JavaSE后学习JavaWeb部分的一些知识点总结以及遇到的一些问题等,如果刚开始学习Java的小伙伴可以点击下方连接查看专栏
本专栏地址:JDBC
Java入门篇: Java基础学习篇
Java进阶学习篇(持续更新中):Java进阶学习篇

在这里插入图片描述

文章目录

  • 一、前言
  • 二、Statement
    • 1.概述
    • 2.方法摘要
  • 三、ResultSet
    • 1.概述
    • 2.方法摘要
      • 1️⃣getXXX(int columnIndex)
      • 2️⃣boolean next()
  • 四、将表中数据存储到集合中
    • 1.创建实体类
    • 2.查询表数据
    • 3.创建集合
    • 4.获取数据并赋值
    • 5.将数据存入集合
    • 6.打印输出集合
    • 7.释放资源
    • 8.完整代码
  • 五、结语

一、前言

这篇文章中会对【JavaWeb | JDBC概述及IDEA连接MySQL】中提到的API做出详细的解释,帮助大家理解,加深印象,以便于在接下来的学习过程中不用去死记硬背每一行代码,而是理解了去编写代码(知道原理在面试中也是很重要的)

二、Statement

1.概述

JavaWeb | JDBC相关API详解 2 (内附以集合形式输出表)_第1张图片

Statement 对象表示基本语句,其中将单个方法应用于某一目标和一组参数,以返回结果,比如 “a.setFoo(b)”。

Statement对象的作用就是用来执行SQL语句。而针对不同类型的SQL语句使用的方法也不一样

2.方法摘要

这里只需要知道其方法即可,接下来的重点会在ResultSet中详细描述

//获取执行sql的对象
Statement stmt = c.createStatement();

//执行sql
ResultSet result = stmt.executeQuery(sql);

JavaWeb | JDBC相关API详解 2 (内附以集合形式输出表)_第2张图片

三、ResultSet

1.概述

从API帮助文档中可以看到该方法的描述

表示数据库结果集的数据表,通常通过执行查询数据库的语句生成。

ResultSet 对象具有指向其当前数据行的光标。最初,光标被置于第一行之前。next 方法将光标移动到下一行;因为该方法在ResultSet 对象没有下一行时返回 false,所以可以在 while 循环中使用它来迭代结果集。

默认的 ResultSet对象不可更新,仅有一个向前移动的光标。因此,只能迭代它一次,并且只能按从第一行到最后一行的顺序进行。可以生成可滚动和/或可更新的 ResultSet 对象。

一般在修改数据库中的某个字段的值、删除某个字段或者将表中的数据封装到一个集合中时会用到这个方法;即在执行完SQL语句以后要有一个变量去接收它,然后再调用set方法进行复制后调用get方法来获取值

ResultSet  executeQuery(sql):执行DQL 语句,返回 ResultSet 对象

2.方法摘要

1️⃣getXXX(int columnIndex)

以 Java 编程语言中 int 的形式获取此 ResultSet 对象的当前行中指定列的值

JavaWeb | JDBC相关API详解 2 (内附以集合形式输出表)_第3张图片

代码实现

//定义SQL语句
String sql = "SELECT * FROM user ";

//获取执行sql的对象
Statement stmt = c.createStatement();

//执行sql
ResultSet result = stmt.executeQuery(sql);

//获取此 ResultSet 对象的当前行中指定列的值
int id = result.getInt("id");

在IDEA中有快捷键,当我们输入了右边的result.getInt("id")后,使用快捷键Ctrl+Alt+V可以一键生成左边,并且其变量名也可以自己选择,就不用自己去书写了,而且连数据类型也自动生成了!
JavaWeb | JDBC相关API详解 2 (内附以集合形式输出表)_第4张图片

2️⃣boolean next()

将光标从当前位置向前移一行。ResultSet 光标最初位于第一行之前;第一次调用 next 方法使第一行成为当前行;第二次调用使第二行成为当前行,依此类推

JavaWeb | JDBC相关API详解 2 (内附以集合形式输出表)_第5张图片
第一次箭头是指向表头行,如下图所示
JavaWeb | JDBC相关API详解 2 (内附以集合形式输出表)_第6张图片
当我们调用了 next() 方法后,光标就下移到第一行数据,并且方法返回true,此时就可以通过 getInt("id") 获取当前行id字段的值,也可以通过 getString("name") 获取当前行name字段的值。如果想获取下一行的数据,继续调用 next() 方法,以此类推。
JavaWeb | JDBC相关API详解 2 (内附以集合形式输出表)_第7张图片
直到最后一行,再调用next()方法的话,就是无效行,因为这时候箭头指向空,那么想要将表中数据放入集合中就可以使用next()方法,再套用一个while循环。当箭头指向有效行时,用get方法取出表中数据,再调用set方法对集合内的属性进行赋值。

四、将表中数据存储到集合中

1.创建实体类

由于我们数据库中的表名是user,所以这里定义实体类的名字就是User;在这个实体类中定义的成员变量就是表中的字段名(id,name,money)这里要和表中一致,否则容易出错

然后使用快捷键一键生成JavaBean类,并使用Alt+Insert快捷键重写toString类(一定要重写toString类,否则无法生成)具体的原因可以参照这篇文章回顾一下

public class User {
    private int id;
    private String name;
    private double money;

    public User() {
    }

    public User(int id, String name, double money) {
        this.id = id;
        this.name = name;
        this.money = money;
    }

    /**
     * 获取
     * @return id
     */
    public int getId() {
        return id;
    }

    /**
     * 设置
     * @param id
     */
    public void setId(int id) {
        this.id = id;
    }

    /**
     * 获取
     * @return name
     */
    public String getName() {
        return name;
    }

    /**
     * 设置
     * @param name
     */
    public void setName(String name) {
        this.name = name;
    }

    /**
     * 获取
     * @return money
     */
    public double getMoney() {
        return money;
    }

    /**
     * 设置
     * @param money
     */
    public void setMoney(double money) {
        this.money = money;
    }

    @Override
    public String toString() {
        return "User{" +
                "id=" + id +
                ", name='" + name + '\'' +
                ", money=" + money +
                '}';
    }
}

2.查询表数据

这里代码与之前差不多,唯一不同的是在执行完SQL语句后要使用 ResultSet 方法来接收变量,以便于调用get和set方法(变量名可以自己取,这里为了可读性所以使用小写的result

		//注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //获取连接
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false";
        String username = "root";
        String password = "123456";
        Connection c = DriverManager.getConnection(url,username,password);

        //定义sql
        String sql = "SELECT * FROM user ";

        //获取执行sql的对象
        Statement stmt = c.createStatement();

        //执行sql
        ResultSet result = stmt.executeQuery(sql);

3.创建集合

这里List后的名字取决于你的实体类名字

List<User> list = new ArrayList<>();

4.获取数据并赋值

首先我们要新建一个User对象user才能用来给集合内的变量赋值


//新建User对象
User user = new User();
int id = result.getInt("id");
String name = result.getString("name");
double money = result.getInt("money");

//set方法进行赋值
user.setId(id);
user.setName(name);
user.setMoney(money);

5.将数据存入集合

//add方法存入集合
list.add(user);

6.打印输出集合

System.out.println(list);

7.释放资源

//释放资源
result.close();
stmt.close();
c.close();

8.完整代码

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

public class jdbcDemo2 {
    public static void main(String[] args) throws Exception {
        //注册驱动
        Class.forName("com.mysql.jdbc.Driver");

        //获取连接
        String url = "jdbc:mysql://localhost:3306/test?useSSL=false";
        String username = "root";
        String password = "123456";
        Connection c = DriverManager.getConnection(url,username,password);

        //定义sql
        String sql = "SELECT * FROM user ";

        //获取执行sql的对象
        Statement stmt = c.createStatement();


        //执行sql
        ResultSet result = stmt.executeQuery(sql);

        //创建集合
        List<User> list = new ArrayList<>();
        
        //遍历表
        while (result.next()){

            //新建User对象
            User user = new User();

            //get方法获取数据
            int id = result.getInt("id");
            String name = result.getString("name");
            double money = result.getInt("money");

            //set方法进行赋值
            user.setId(id);
            user.setName(name);
            user.setMoney(money);

            //add方法存入集合
            list.add(user);
        }

        //输出集合
        System.out.println(list);

        //释放资源
        result.close();
        stmt.close();
        c.close();

    }
}

五、结语

接下来会讲述有关于SQL注入相关问题

你可能感兴趣的:(JavaWeb,#,JDBC,java,数据库,mysql)