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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM