【JDBC】JDBC之ResultSet 结果集

ResultSet 结果集

  • 一、 ResultSet(结果集)
    • 1.1 接收结果集
    • 1.2 遍历ResultSet中的数据
      • 1.2.1 遍历方法
    • 1.3 综合案例
      • 1.3.1 根据列的名称获取
      • 1.3.2 根据列的下标获取
  • 二、常见错误

一、 ResultSet(结果集)


在执行查询SQL后,存放查询到的结果集数据

1.1 接收结果集

ResultSet rs = statement.executeQuery(sql)

ResultSet rs = statement.executeQuery("SELECT * FROM stu");

1.2 遍历ResultSet中的数据

ResultSet以表(Table)结构进行临时结果的存储,需要通过JDBC API将其中的数据进行依次获取

  • 数据行指针:初始位置在第一行数据前,每调用一次boolean next()方法,ResultSet中指针向下移动一行,结果为true,表示当前行有数据

  • rs.getXxx(“列名”); 根据列名获得数据

  • rs.getXxx(整数下标); 代表根据列的编号顺序获得!从1开始

    boolean next() throws SQLException;//判断rs结果集中下一行是否有数据

1.2.1 遍历方法

int getInt(int columnIndex) throws SQLException;//获得当前行的第N列的int值

int getInt(String columnLabel) throws SQLException;//获得当前行columnLabel列的int值
  • 注意:列的编号从1开始

1.3 综合案例

对stu表所有的数据进行遍历

1.3.1 根据列的名称获取

package com.qf.day42.t2.basic;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

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

        //2.获得连接
        Connection connection = DriverManager.getConnection("jdbc:mysql://localhost:3306/companydb?useUnicode=true&characterEncoding=utf8","root","123456");

        //3.获取执行SQL的对象
        Statement statement = connection.createStatement();

        //4.编写SQL语句
        String sql = "select student_id,student_name,sex,birthday,phone,GradeId from stu;";
        ResultSet resultSet = statement.executeQuery(sql);

        //5.处理结果 (结果集!)
        while(resultSet.next()){//判断结果集中是否有下一行!
            //根据列名获取当前行每一列的数据
            String student_id = resultSet.getString("student_id");
            String student_name = resultSet.getString("student_name");
            String sex = resultSet.getString("sex");
            String birthday = resultSet.getString("birthday");
            String phone = resultSet.getString("phone");
            int gradeId = resultSet.getInt("gradeId");
            System.out.println(student_id+"\t"+student_name+"\t"+sex+"\t"+birthday+"\t"+phone+"\t"+gradeId);
        }

        //6.释放资源
        resultSet.close();
        statement.close();
        connection.close();

    }
}

1.3.2 根据列的下标获取

 //5.处理结果 (结果集!)
        while(resultSet.next()){//判断结果集中是否有下一行!
            //根据列的编号获取当前行每一列的数据
            String student_id = resultSet.getString(1);
            String student_name = resultSet.getString(2);
            String sex = resultSet.getString(3);
            String birthday = resultSet.getString(4);
            String phone=  resultSet.getString(5);
            int gradeId  = resultSet.getInt(6);
            System.out.println(student_id+"\t"+student_name+"\t"+sex+"\t"+birthday+"\t"+phone+"\t"+gradeId);
 }

二、常见错误

  • java.lang.ClassNotFoundException
    原因:找不到类(类名书写错误、没有导入jar包)
  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException
    原因:与SQL语句相关的错误(表名列名书写错误、约束错误、插入的值是String类型,但是没有加单引号)建议:在客户端工具中测试sql语句后,再粘贴到代码中来
  • com.mysql.jdbc.exceptions.jdbc4.MySQLIntegrityConstraintViolationException: Duplicate entry ‘S1003’ for key ‘PRIMARY’
    原因:主键值已存在!更改要插入的主键值
  • com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:Unknown column ‘password’ in
    原因:可能输入的值的类型不对,确定插入元素时,对应的值的类型是否争取

你可能感兴趣的:(JavaWeb,JDBC)