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;
}
}

最新文章

  1. C# 将容器内容转成图片导出
  2. APP数据接口开发的一些经验
  3. Java Io 字符流
  4. (Struts)ActionForm类及表单数据验证
  5. python读取指定内存的内容
  6. iOS:UIView的block函数实现转场动画---单视图
  7. 部署测试环境(ubuntu+mysql+tomcat)
  8. Intellij IDEA Maven创建web项目
  9. 避免Java应用中NullPointerException的技巧和最佳实践
  10. Bootstrap Paginator分页插件的使用
  11. Centos6.x X64 飞信安装
  12. poj 3761 Bubble Sort_快速幂
  13. BNUOJ 34981 A Matrix
  14. Dynamicaly Typed(动态定型), Objective-C Runtime Programming
  15. My new life
  16. 属性getter和setter
  17. Python3下POST请求HTTPS链接
  18. 【转】package control安装成功,但是ctrl+shiif+p调不出来面板,preference里面也没有Package Control
  19. 八大排序算法详解(动图演示 思路分析 实例代码java 复杂度分析 适用场景)
  20. IE缓存清除

热门文章

  1. JSP开发机票预定系统 源码
  2. neo4j学习摘要
  3. P5840 [COCI2015]Divljak
  4. Eclipse jee最新版国内镜像点下载方式
  5. P3902 递增
  6. 剑指offer-面试题41-数据流中的中位数-堆
  7. opencv —— erode、dilate 腐蚀与膨胀
  8. vue-cli莫名其妙的警告
  9. webservice之Http传输错误问题
  10. Python 函数 初学者笔记