ResultSet结果集对象,封装结果。它是怎么做到封装结果的呢?

游标,类似指针索引
最初指在“列名”上,要取到数据就需要让游标向下移动
移动后就指向了第一行数据,然后通过一些方法把第一行的每一列都取出来。
一次只能获取一行中的一列数据

这个过程就涉及到了两类方法,移动和获取
移动:

next():游标向下移动一行,判断当前行是否为最后一行(判断是否有数据)。如果是返回false,不是则返回ture

获取:

getXXX(参数):获取数据
  XXX代表数据类型,例如表格中的name 用getString
    参数有两种情况
    int:代表列的编号(从1开始),getString(1)1表示第一列
    string:代表列的名称,getString("列名")

注意使用步骤:
  ①游标向下移动一行
  ②判断是否有数据
  ③获取数据

while (rs.next()){①②
  //获取数据
  String str = rs.getString(1);
  int i = rs.getInt(2);
  double d = rs.getDouble(3);
  System.out.println(str+" "+i+" "+d);
}

基本使用

package cn.itcast.jdbc;

import java.sql.*;

/*
* DDL语句
* */
public class JdbcDemo6 {
public static void main(String[] args) {
//声明数据库连接对象
Connection conn = null;
//声明数据库执行对象
Statement stmt = null;
//声明结果集对象
ResultSet rs = null;
try {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库连接对象
conn = DriverManager.getConnection("jdbc:mysql:///myemployees", "root", "ROOT");
//3.定义SQL
String sql ="select * from job_grades;";
//4.获取执行SQL的对象
stmt = conn.createStatement();
//5.执行SQL
rs= stmt.executeQuery(sql);
//6.处理返回结果
//6.1让游标向下移动一行
rs.next();
//6.2获取数据
String str = rs.getString(1);
int i = rs.getInt(2);
double d = rs.getDouble(3);
System.out.println(str+" "+i+" "+d);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//7.释放资源,最后用的最先释放
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

正确使用

package cn.itcast.jdbc;

import java.sql.*;

public class JdbcDemo7 {
public static void main(String[] args) {
//声明数据库连接对象
Connection conn = null;
//声明数据库执行对象
Statement stmt = null;
//声明结果集对象
ResultSet rs = null;
try {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取数据库连接对象
conn = DriverManager.getConnection("jdbc:mysql:///myemployees", "root", "ROOT");
//3.定义SQL
String sql ="select * from job_grades;";
//4.获取执行SQL的对象
stmt = conn.createStatement();
//5.执行SQL
rs= stmt.executeQuery(sql);
//6.处理返回结果
//循环判断游标是否是最后一行末尾
while (rs.next()){
//获取数据
String str = rs.getString(1);
int i = rs.getInt(2);
double d = rs.getDouble(3);
System.out.println(str+" "+i+" "+d);
} } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
//7.释放资源,最后用的最先释放
if (rs != null){
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null){
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null){
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
}
}

练习

package cn.itcast.domain;

import java.util.Date;

/*
* 封装Beauty表数据的JavaBean类
* */
public class Beauty {
private int id;
private String name;
private char sex;
private Date borndate;
private double phone;
private int boyfriend_id; public int getId() {
return id;
} public void setId(int id) {
this.id = id;
} public String getName() {
return name;
} public void setName(String name) {
this.name = name;
} public char getSex() {
return sex;
} public void setSex(char sex) {
this.sex = sex;
} public Date getBorndate() {
return borndate;
} public void setBorndate(Date borndate) {
this.borndate = borndate;
} public double getPhone() {
return phone;
} public void setPhone(int phone) {
this.phone = phone;
} public int getBoyfriend_id() {
return boyfriend_id;
} public void setBoyfriend_id(int boyfriend_id) {
this.boyfriend_id = boyfriend_id;
} @Override
public String toString() {
return "Beauty{" +
"id=" + id +
", name='" + name + '\'' +
", sex=" + sex +
", borndate=" + borndate +
", phone=" + phone +
", boyfriend_id=" + boyfriend_id +
'}';
}
}

封装类用的util包下的date

项目中返回的sql下的date

sql下的date是util下date的子类,父类可以接受子类对象。直接封装就行了

package cn.itcast.jdbc;

import cn.itcast.domain.Beauty;

import java.sql.*;
import java.util.ArrayList;
import java.util.List; /**
* 定义一个方法,查询beauty表的数据将其封装为对象,然后装载集合返回
*/
public class JDBCDemo8 {
public static void main(String[] args) {
List<Beauty> list = new JDBCDemo8().findAll();
System.out.println(list);
System.out.println(list.size());
}
/**
* 查询所有beauty对象
*/
public List<Beauty> findAll() {
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
List<Beauty> list = null;
try {
//1.注册驱动
Class.forName("com.mysql.jdbc.Driver");
//2.获取连接
conn = DriverManager.getConnection("jdbc:mysql:///girls", "root", "ROOT");
//3.第一SQL
String sql = "select * from beauty";
//4.获取执行SQL的对象
stmt = conn.createStatement();
//5.执行SQL
rs = stmt.executeQuery(sql);
//7.封装对象
Beauty beauty = null;
//6.遍历结果集,封装对象,装载集合
list = new ArrayList<Beauty>();
while (rs.next()) {//判断是否有下一行,有就执行,没有就结束执行下面的语句
//获取数据 //名字要和数据库保持一致,和封装类没有关系
int id = rs.getInt("id");
String name = rs.getString("name");
Date borndate = rs.getDate("borndate");
int boyfriend_id = rs.getInt("boyfriend_id"); // Beauty beauty = new Beauty();
/*
* 如果写在这就会占用很多栈内存(new的对象都在栈内存)
* 写在第七步的位置
* */ //创建对象并赋值
beauty = new Beauty();
beauty.setId(id);
beauty.setName(name);
beauty.setBorndate(borndate);
beauty.setBoyfriend_id(boyfriend_id); //装载集合
list.add(beauty);
} } catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally {
if (rs != null) {
try {
rs.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (stmt != null) {
try {
stmt.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
if (conn != null) {
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
return list;
}
}

JDBC——ResultSet结果集对象的更多相关文章

  1. 将JDBC ResultSet结果集变成List

    private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>() ...

  2. 将JDBC ResultSet结果集转成List

    private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>() ...

  3. JDBC连接数据以及详细的ResultSet结果集解释

    一.数据库连接 (前面为jdbc的其他参数,文章下部分为ResultSet详解) ResultSet rs = st.executeQuery(sqlStr) 1. java的sql框架支持多种数据库 ...

  4. java jdbc ResultSet结果通过java反射赋值给java对象

    在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. ...

  5. ResultSet是结果集对象

    ResultSet是结果集对象 DriverManager管理一组驱动程序 PreparedStatement预编译的,用来发送和执行SQL语句的

  6. 由DB2分页想到的,关于JDBC ResultSet 处理大数据量

    最近在处理DB2 ,查询中,发现如下问题.如果一个查询 count(*),有几十万行,分页如何实现 select row_number() over (order by fid desc ) as r ...

  7. JDBC05 ResultSet结果集

    ResultSet结果集 -Statement执行SQL语句时返回ResultSet结果集 -ResultSet提供的检索不同类型字段的方法,常用的有: getString():获得在数据库里是var ...

  8. com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行

    參考博客com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行 java获取结果集,if(rs!=null).和while(rs.next( ...

  9. 使用ResultSet结果集查询数据

    直接上下代码: package com.learn.jdbc.chap05; import java.sql.Connection; import java.sql.PreparedStatement ...

随机推荐

  1. 记一个开发是遇到的坑之Oralce 字符串排序

    简单描述一下情况,就是存储过程中用一个字符串类型的字段作为患者就诊的排序号,结果莫名发现叫完1号后叫了11.12等患者.用户的反馈不一定准确,自己加了日志的,赶紧拷贝日志来观察一下.结果发现实际情况就 ...

  2. #《Essential C++》读书笔记# 第六章 以template进行编程

    练习题答案 练习6.1 试改写以下类,使它成为一个class template: class example { public: example(double min, double max); ex ...

  3. Luarocks 安装艰难过程

    https://www.cnblogs.com/fanxiaojuan/p/11551268.html

  4. 消息总线:Spring Cloud Stream

    最近在学习Spring Cloud的知识,现将消息总线:Spring Cloud Stream 的相关知识笔记整理如下.[采用 oneNote格式排版]

  5. PHP0021:PHP COOKIE 设置修改删除

  6. MySQL 8 备份与恢复

    备份应用的场景包括:系统崩溃.硬件故障.用户错误.升级MySQL Installation.传输MySQL Installation到另一台机器.设置复制等. Slave Server备份 在备份Sl ...

  7. [Contract] public、external, private、internal 在 Solidity 中如何选择

    合约内部访问的用 private,修饰内部变量时选择.通过 external 函数返回. 合约内部.外部均可访问的用 public. 仅在合约外部访问的用 external,明确暴露给前端使用时选择. ...

  8. Java多线程之线程的协作

    等待队列 每个实例都有一个等待,他是在实例的wait方法执行后停止操作的队列,除非发现以下情况,线程才会退出等待队列 1.有其他线程的notify方法来唤醒线程 2.有其他线程的notifyAll方法 ...

  9. IDEA安装Flutter遇到的坑

    环境: ①IDEA2019.3.3 ②JAVA12 ③Android-SDK29.0.3 ④Flutter1.14.6 ⑤WINDOWS10.0.18363.657 ⑥AL10实体机,Android8 ...

  10. 【笔记】机器学习 - 李宏毅 - 11 - Keras Demo2 & Fizz Buzz

    1. Keras Demo2 前节的Keras Demo代码: import numpy as np from keras.models import Sequential from keras.la ...