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 ...
随机推荐
- java面试必问问题总结
1. 自我介绍 2. get跟load的区别 3. 什么是重载,什么是重写 4. HashTable跟HashMap的区别 5. Jsp九大隐式对象 6. Forword和redirect 的区别 7 ...
- 通过vsphere给esxi添加本地硬盘
公司ESXi服务器的硬盘空间不够使用,现在新加了一块硬盘在ESxi服务器上.在服务器上添加完硬盘后,在Vsphere上是看不到新加硬盘的. 下面我们来通过虚拟机模拟该情况,先添加一块硬盘.如下图: 在 ...
- CentOS7配置ftp
1.下载vsftpd yum install -y vsftpd 2.设置开机自启动 systemctl enable vsftpd.service 3.启动 systemctl start vsft ...
- 第2章.数组和ArrayList
2.1 数组基本概念 数组是可索引的数据的集合.数组既可以是内置的类型,也可以是用户自定义的类型.事实上,把数组数据称为对象大概是最简便的方式.C#中数组实际上就是对象的本身,因为它们都源于Syste ...
- Node.js核心模块-http
通过node中的http模块可以创建编写服务器 引入 const http = require('http') http举例使用: const http = require('http') //引入 ...
- select下拉框相关操作(更新中。。。)
背景 记录一些关于html标签的操作,基本上都是jquery操作 select下拉框 根据value查找对应option,然后执行选中操作 $("#selectId").find( ...
- DataReader类型化数据读取与装箱性能研究
前言 在各种ORM框架或者SQL映射框架(例如MyBatis,SOD框架之SQL-MAP功能)中,都有将查询的结果映射为内存对象的需求,包括映射到实体类.简单类型(例如Java的POJO,.NET的P ...
- Centos中Python升级为3.X时yum出现except OSError, e: ^ SyntaxError: invalid syntax问题 No module named 'pip._internal.main
CentOS 7升级Python到3.7.2后,需要在/usr/bin/python创建了一个指向Python 3的软连接,然后将/usr/bin/yum的顶部的: !/usr/bin/python ...
- 使用nginx代理gogs遇到推送代码错误的问题(RPC failed; HTTP 413 curl 22 The requested URL returned error: 413)
前提 代码管理我是用Gogs.Git,前些阵子使用Nginx将git.balabiu.com反向代理到了Gogs的默认端口,其他二级域名准备做其他使用, 导致上报代码出现了错误. 问题 推送代码报错误 ...
- 基于TCP协议Socket通信
服务器线程处理类 package demo4; import java.io.*; import java.net.Socket; /** * 服务器线程处理类 * @ClassName Server ...