JDBC-resultSet對象細節


ResultSet對象
功能: 當執行的語句是查詢語句時, resultSet對象用於封裝查詢結果.

方法:
boolean next() 該方法讓結果集中的指針(游標)往下移動一行.並且判斷改行是否有數據。 有返回true,沒有返回false
String getString(int cloumnCount) 從當前指向的行中獲得String 類型的數據. 根據列所在的索引位置取.
String getString(String columnName) 從當前指向的行中獲得String 類型的數據. 根據列名取.
getXXX系列方法 有很多種, 沒對針對的都是數據庫中的不同類型.
數據庫中的類型根getXXX方法如何對應?
數據庫類型 對應的Get方法
-------------------------------------------------
char/varchar getString
int getInt
bigint getLong
float/double getFloat/getDouble
datetime/timestamp getDate

------------------------------------------------------------------------------------------------------------------

package cn.itcast.d_rs;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.junit.Test;
//ResultSet細節
//功能: 封裝結果集數據
//操作: 如何獲得(取出)結果
//結論:  
    //1. next方法,向下移動並判斷是否有內容
    //2. getXXX方法,根據列索引或列名獲得列的內容
public class Demo {
    @Test
    public void fun1() throws Exception{
        //1 注冊驅動
        Class.forName("com.mysql.jdbc.Driver");
        //2 獲得連接
        Connection conn = DriverManager.getConnection

("jdbc:mysql://localhost:3306/day05", "root", "1234");
        //3 創建Statement
        Statement st = conn.createStatement();
        //4 書寫sql
        String sql =  "select * from t_user" ;
        //5 執行sql
        ResultSet rs = st.executeQuery(sql);
        //向下移動一行,並判斷
        while(rs.next()){
            //有數據
            //取數據:getXXX 
            int id = rs.getInt(1);//獲得第一列的值
            //int id rs.getInt("id");// 獲得id列的值
            String name = rs.getString(2);//獲得第二列的值
            int age = rs.getInt(3);//獲得第三列的值
            System.out.println(id+"==>"+name+"==>"+age);
            
            
        }
        
        //6關閉資源
     st.close();
     conn.close();
    }
    /* 數據庫類型            java類型
        int                 int
        double             double
        decimal             double
        char             String
        varchar             String
        datetime         Date
        timestamp        Timestamp/Date
    
     */
}

 



8.ResultSet(了解內容)
結果集滾動;
滾動指的就是指針的位置不僅可以向下,還可以任意控制.
涉及的方法如下:
boolean absolute(int row) 將指針移動到指定位置. 參數就是位置. 第一行的位置是1. 如果填寫負數表示倒數.例如-1=>最后一行. 如果移動超出范圍將會返回false.
void afterLast() 將光標移動到此 ResultSet 對象的末尾,正好位於最后一行之后。 (該行沒有數據)
void beforeFirst() 將光標移動到此 ResultSet 對象的開頭,正好位於第一行之前。(result的初始位置)
boolean first() 將光標移動到第一行
boolean last() 將光標移動到最后一行
boolean next() 光標向下移動一行.
boolean previous() next反方向移動.向上移動一行.
//--------------------------------------------------------
使用resultSet修改記錄.
默認情況下resultSet 是不能反向修改數據庫中的記錄的. 需要在創建Statement對象時, 通過指定參數 創建一個可以產生 可以修改數據的resultSet對象的Statement
Statement createStatement(int resultSetType, int resultSetConcurrency)
參數1 resultSetType - 結果集類型
ResultSet.TYPE_FORWARD_ONLY、 不支持結果集滾動,只能向前.
ResultSet.TYPE_SCROLL_INSENSITIVE 支持滾動, 遲鈍,不敏感的結果集.
ResultSet.TYPE_SCROLL_SENSITIVE 支持滾動, 敏感的結果集.
參數2 resultSetConcurrency - 結果是否支持修改類型
ResultSet.CONCUR_READ_ONLY 不支持修改
ResultSet.CONCUR_UPDATABLE 支持修改

利用如下代碼可以反向修改數據庫中的數據:
String sql = "select * from emp";
Statement state = conn.createStatement(ResultSet.TYPE_FORWARD_ONLY,ResultSet.CONCUR_UPDATABLE);

ResultSet rs = state.executeQuery(sql);

rs.next();

rs.updateString("ename", "haha");

rs.updateRow();

結論: 不要使用resultSet 做修改的操作. 真的要做修改 我們要手寫update語句來做.

package cn.itcast.d_rs;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;

import org.junit.Test;
//ResultSet細節
// 1.結果集的滾動 => 移動結果集的指針就是滾動
// 2.結果集反向修改數據庫
public class Demo2 {
    @Test
    public void fun1() throws Exception{
        //1 注冊驅動
        Class.forName("com.mysql.jdbc.Driver");
        //2 獲得連接
        Connection conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/day05", "root", "1234");
        //3 創建Statement
        Statement st = conn.createStatement();
        //4 書寫sql
        String sql =  "select * from t_user" ;
        //5 執行sql
        ResultSet rs = st.executeQuery(sql);
        //倒着遍歷
            //1> 光標移動到最后一行之后
            rs.afterLast();
            //2> 遍歷=>
            while(rs.previous()){//向上移動光標,並判斷是否有數據
                int id = rs.getInt("id");// 獲得id列的值
                String name = rs.getString("name");//獲得第二列的值
                int age = rs.getInt("age");//獲得第三列的值
                System.out.println(id+"==>"+name+"==>"+age);
            }
        //6關閉資源
     st.close();
     conn.close();
    }
    /* 數據庫類型            java類型
        int                 int
        double             double
        decimal             double
        char             String
        varchar             String
        datetime         Date
        timestamp        Timestamp/Date
    
     */
}

 


免責聲明!

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



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