mysql jdbc resultset_JDBC——ResultSet结果集对象

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

cfd5c6a99a9f3dfcfee6476b8212404a.png

游标,类似指针索引

最初指在“列名”上,要取到数据就需要让游标向下移动

移动后就指向了第一行数据,然后通过一些方法把第一行的每一列都取出来。

一次只能获取一行中的一列数据

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

移动:

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

}

基本使用

packagecn.itcast.jdbc;import java.sql.*;/** DDL语句

**/

public classJdbcDemo6 {public static voidmain(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();

}

}

}

}

}

正确使用

packagecn.itcast.jdbc;import java.sql.*;public classJdbcDemo7 {public static voidmain(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();

}

}

}

}

}

练习

5307486c21e4585734b89b2d490a2ff5.png

packagecn.itcast.domain;importjava.util.Date;/** 封装Beauty表数据的JavaBean类

**/

public classBeauty {private intid;privateString name;private charsex;privateDate borndate;private doublephone;private intboyfriend_id;public intgetId() {returnid;

}public void setId(intid) {this.id =id;

}publicString getName() {returnname;

}public voidsetName(String name) {this.name =name;

}public chargetSex() {returnsex;

}public void setSex(charsex) {this.sex =sex;

}publicDate getBorndate() {returnborndate;

}public voidsetBorndate(Date borndate) {this.borndate =borndate;

}public doublegetPhone() {returnphone;

}public void setPhone(intphone) {this.phone =phone;

}public intgetBoyfriend_id() {returnboyfriend_id;

}public void setBoyfriend_id(intboyfriend_id) {this.boyfriend_id =boyfriend_id;

}

@OverridepublicString toString() {return "Beauty{" +

"id=" + id +

", name='" + name + '\'' +

", sex=" + sex +

", borndate=" + borndate +

", phone=" + phone +

", boyfriend_id=" + boyfriend_id +

'}';

}

}

封装类用的util包下的date

652ed4a60c2c96067fd0753db5254612.png

项目中返回的sql下的date

d0a45782b0fdf561d62f6276cfc1d0b4.png

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

packagecn.itcast.jdbc;importcn.itcast.domain.Beauty;import java.sql.*;importjava.util.ArrayList;importjava.util.List;/*** 定义一个方法,查询beauty表的数据将其封装为对象,然后装载集合返回*/

public classJDBCDemo8 {public static voidmain(String[] args) {

List list = newJDBCDemo8().findAll();

System.out.println(list);

System.out.println(list.size());

}/*** 查询所有beauty对象*/

public ListfindAll() {

Connection conn= null;

Statement stmt= null;

ResultSet rs= null;

List 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();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 = newBeauty();

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();

}

}

}returnlist;

}

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值