JDBC——ResultSet结果集对象
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结果集对象的更多相关文章
- 将JDBC ResultSet结果集变成List
private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>() ...
- 将JDBC ResultSet结果集转成List
private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>() ...
- JDBC连接数据以及详细的ResultSet结果集解释
一.数据库连接 (前面为jdbc的其他参数,文章下部分为ResultSet详解) ResultSet rs = st.executeQuery(sqlStr) 1. java的sql框架支持多种数据库 ...
- java jdbc ResultSet结果通过java反射赋值给java对象
在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. ...
- ResultSet是结果集对象
ResultSet是结果集对象 DriverManager管理一组驱动程序 PreparedStatement预编译的,用来发送和执行SQL语句的
- 由DB2分页想到的,关于JDBC ResultSet 处理大数据量
最近在处理DB2 ,查询中,发现如下问题.如果一个查询 count(*),有几十万行,分页如何实现 select row_number() over (order by fid desc ) as r ...
- JDBC05 ResultSet结果集
ResultSet结果集 -Statement执行SQL语句时返回ResultSet结果集 -ResultSet提供的检索不同类型字段的方法,常用的有: getString():获得在数据库里是var ...
- com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行
參考博客com.microsoft.sqlserver.jdbc.SQLServerException: 结果集没有当前行 java获取结果集,if(rs!=null).和while(rs.next( ...
- 使用ResultSet结果集查询数据
直接上下代码: package com.learn.jdbc.chap05; import java.sql.Connection; import java.sql.PreparedStatement ...
随机推荐
- VSTO开发指南(VB2013版) 第一章 Office对象模型
完美地将visual basic和office 办公软件结合起来.来自微软公司VSTO小组的权威专家所编著. 全书共712页,内容极其全面而深入,猛一看,厚地犹如庞然大物.看完离大神就不远了哦< ...
- Html介绍,认识head标签
<head></head>标签位于html文档的头部,主要是用来描述文档的各种属性和信息,包括文档的标题等,当然文档头部包含的数据都不会真正作为内容展示给访客的. 如下的一些标 ...
- JS事件流、DOM事件流、IE事件处理、跨浏览器事件处理、事件对象与类型
事件的移除 removeEventListener() 第二个参数需要指定要移除的事件句柄,不能是匿名函数,因为无法识别 想要移除成功,那么三个参数必须跟addEventListener中的三个完全一 ...
- BigDecimal精确计算工具类
前言 在实际开发中,遇到例如货币,统计等商业计算的时候,一般需要采用java.math.BigDecimal类来进行精确计算.而这类操作通常都是可预知的,也就是通用的.所以,写了个工具类来方便以后的工 ...
- Web服务器开发
ip地址和端口号 ip地址用来定位计算机 端口号用来定位具体的应用程序 一切需要联网通信的软件都会占用一个端口号 端口号的范围从0-65536之间 在计算机中有一些默认端口号最好不要使用 如http服 ...
- vue_day01
Vue_day01 1. 认识vue 1.1 什么是vue (1)Vue是构建界面的渐进式的js框架 (2)只关注视图层, 采用自底向上增量开发的设计. (3)Vue 的目标是通过尽可能简单的 API ...
- 创建react项目,用typescript语法
create-react-app 文档 typescript 单元测试 官网测试相关文档
- 【Jmeter】jmeter提取response中的返回值,并保存到本地文件--BeanShell后置处理器
有个需求,需要在压测环境中,创建几十万的账号数据,然后再根据创建结果,查询到某些账号信息. 按照之前我的做法,直接Python调用API,然后再数据库查询: 但是近期所有开发人员的数据库访问权限被限制 ...
- HDU1408 - 盐水的故事
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1408 解题思路:主要考虑最后一滴可能不满足D毫升,但仍算1秒.另外还要注意浮点数的比较. #inclu ...
- 航空航天专用Everspin非易失性MRAM存储器
TAMU是由瑞典乌普萨拉的Ångström航空航天公司(ÅAC)开发的高级磁力计子系统.TAMU的目的是提供地球磁场的磁力计数据,以便与子画面观测相关.实验性TAMU由使用领先技术制造的四种类型的设备 ...