首页 > 代码库 > JDBC-resultSet对象细节

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         */}

 

JDBC-resultSet对象细节