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

     */
}
时间: 2024-12-25 04:59:25

JDBC-resultSet对象细节的相关文章

java jdbc ResultSet结果通过java反射赋值给java对象

在不整合框架的情况下,使用jdbc从数据库读取数据时都得一个个的get和set,不仅累代码还显得不简洁,所以利用java的反射机制写了一个工具类,这样用jdbc从数据库拿数据的时候就不用那么麻烦了. 因为很多情况下数据不止一条,所以返回的是对象类的一个集合. 需要注意的地方:在这里,数据库字段命名格式为:user_name 下划线格式,而java类型的命名格式为驼峰命名格式. 具体代码如下: package com.xc.sap.util; import java.sql.Connection;

jdbc链接对象详解

JDBC(Java Data Base Connectivity,java数据库连接)是一种用于执行SQL语句的Java API,可以为多种关系数据库提供统一访问,它由一组用Java语言编写的类和接口组成. JDBC API介绍                提供者:sun公司 内容:供程序员调用的接口与类,集成在java.sql和javax.sql包中,如:DriverManager类.Connection接口.Statement接口.ResultSet接口 DriverManager :依据

com.microsoft.sqlserver.jdbc.SQLServerException: 对象名 'xxxxx' 无效

一般这种问题就是由于大家在.hbm.xml定义的数据库表名和数据库的关键字冲突了,导致产生这样的错误.但我今天遇到了下面的错误,看着像是那个问题,不过我整了好久并不是关键字冲突问题,由于是手工配置,在配置时将正确的 hibernate.hbm2ddl.auto=update误写成了hibernate.hbm2ddl=update导致下边的错误,好几个小时就在痛苦中度过了.. Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 对

resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found.

resultset 对象获取行字段数据时报:java.sql.SQLException: Column 'id' not found. 代码: String sql="SELECT d.content,c.name AS categoryName FROM news_detail d,news_category c WHERE d.categoryId=c.id"; Object[] params ={}; System.out.println(this.executeQuery(sq

将JDBC ResultSet结果集变成List

private List<Map<String, Object>> list = new ArrayList<Map<String,Object>>(); public String queryAll() { Connection conn = null; Statement sta = null; ResultSet rs = null; try { Class.forName("com.mysql.jdbc.Driver"); con

JDBC有关对象和API

1.JDBC接口及数据库厂商的实现 1.DriverManager 驱动管理 2.Connection 连接接口 DatabaseMetaData 3.Statement 语句对象接口 PreparedStatement CallableStatement 4.ResultSet 结果集接口 ResultSetMetaData 结果集接口 2.

jdbc中的细节

JDBC 架构:JDBC 的 API 支持两层和三层处理模式进行数据库的访问,但是一般的JDBC架构由两层处理模式组成.(1)JDBC API:提供了应用程序对 JDBC 管理器的连接(2)JDBC Driver API:提供了 JDBC 管理器对驱动程序连接 结构图见 jdbc结构图.png JDBC 的 API 提供了以下接口和类:DriverManager :这个类管理一系列数据库驱动程序.匹配连接使用通信子协议从 JAVA 应用程序中请求合适的数据库驱动程序.识别 JDBC 下某个子协议

JDBC PrepareStatement对象执行批量处理实例

以下是使用PrepareStatement对象进行批处理的典型步骤顺序 - 使用占位符创建SQL语句. 使用prepareStatement()方法创建PrepareStatement对象. 使用setAutoCommit()将自动提交设置为false. 使用addBatch()方法在创建的Statement对象上添加SQL语句到批处理中. 在创建的Statement对象上使用executeBatch()方法执行所有SQL语句. 最后,使用commit()方法提交所有更改. 此示例代码是基于前面

JDBC Statement对象执行批量处理实例

以下是使用Statement对象的批处理的典型步骤序列 - 使用createStatement()方法创建Statement对象. 使用setAutoCommit()将自动提交设置为false. 使用addBatch()方法在创建的Statement对象上添加SQL语句到批处理中. 在创建的Statement对象上使用executeBatch()方法执行所有SQL语句. 最后,使用commit()方法提交所有更改. 此示例代码是基于前面章节中完成的环境和数据库设置编写的. 以下代码片段提供了使用