ResultSet基本使用

1.直接使用get方法获取对应的类型的数据,当然需要结合while(resultset.next())

如:

 ResultSet rs = ps.executeQuery();
            if(rs.next()){
                employee=new Employee(rs.getLong(1),rs.getString(2),rs.getString(3),rs.getInt(4));
            }

2.使用getMetaData()方法,得到表结构,包括列名,列的个数,列的数据类型。然后遍历

主要使用:列的个数,列名,通过列名可以使用resultSet getObject(name)  获取对应的值,然后通过反射得到对应的属性,通过属性给对象赋值。

 ResultSetMetaData rsmd = rs.getMetaData();// 得到记录集,元素对象。
            // 通过此对象可以得到表的结构,包括,列名,列的个数,列数据类型
            while(rs.next()){
                T m = cls.newInstance();// 通过反射得到实体对象。
                for(int i=0;i<rsmd.getColumnCount();i++){
                   String col_name = rsmd.getCatalogName(i+1);// 获取列名
                    Object value = rs.getObject(col_name);//获取列对应的值。
                    Field field = cls.getDeclaredField(col_name);//获取对象对应的名称属性,然后给属性赋值
                    field.setAccessible(true);// 让可以访问私有属性
                    field.set(m,value);// 给对象私有属性赋值
                }
                list.add(m);
时间: 2024-10-16 23:50:30

ResultSet基本使用的相关文章

Java判断数据库结果集ResultSet 中是否存在指定列名

最近最项目,项目的持久化部分用的是spring jdbc,查询出来的结果集要映射为对象,每次都在查询SQL的方法内定义私有的mapper 变量,内部实现mapRow 方法,似乎有些浪费,就想着定义一个公用的mapRow 实现,节省代码,方便维护. 在写的过程中,发现一个问题,就是涉及到一个很大的对象,属性非常多,但每次查询出来的属性却又都不一样,这样的公用mapRow 该怎么写呢,能否根据结果集中是否有某个属性,才让其映射,没有的就不再映射呢? 立马翻开jdk api,找到ResultSet ,

【疑难杂症02】ResultSet.next() 效率低下问题解决

今天帮同事解决了一个问题,记录一下,帮助有需要的人. 一.问题解决经过 事情的经过是这样的,下午我在敲代码的时候,一个同事悄悄走到我身边,问我有没有用没用过Oracle,这下我蒙了,难道我在他们眼中这么弱吗?不过我还是弱弱的问了一句咋了,他说碰到一个奇怪的现象,说他用jdbc查询Oracle,然后循环取数据要30秒,我问怎么可能,他说是真的,就1000条数据,我当然不信,就说带我去看. 然后我走过去,发现他旁边还坐了一个人,我猜也在帮忙解决问题,只不过没有解决而已,我让他给我看看代码,我看了一眼

JavaEE JDBC ResultSet内外移动

ResultSet内外移动 @author ixenos 内外移动指位置光标的移动 内移动就是一个ResultSet得到后的那个光标! 外移动就是多个ResultSet的迭代 内移动 一般的数据库都不允许单个查询提交多个SELECT语句, 1.execute执行SQL语句后,返回一个结果集ResultSet, 2.其中有个光标next在第一个元组之前(想象一下),调用hasNext就会判断光标下一个元组存不存在 3.rs.next定位行(元组triple),rs.getXXX定位列(字段fiel

重写ResultSet实现分页功能(最好的分页技术)(转)

1.首先定义一个接口Pageable 继承ResultSet这个类 并在接口中定义一些自己的方法,具体方法如下: package com.page; import java.sql.ResultSet; public interface Pageable extends ResultSet {   /**返回总页数 */ int getPageCount(); /**返回当前页的记录条数 */ int getPageRowsCount(); /**返回分页大小 */ int getPageSiz

JDBC : 使用 ResultSet 执行查询操作

package xuezaipiao2; import java.sql.Connection; import java.sql.ResultSet; import java.sql.Statement; import xuezaipiao1.JDBC_Tools; public class UseResultAnd { public static void main(String[] args) { /** * ResultSet(结果集) : 封装了使用 JDBC 进行查询的结构. * 1.

为什么jdbc中的resultset只能取一次去第二次就报错了

引用 6 楼  的回复: 好吧各位,应该写getInt(1)但是我要问的是为什么第二次用会出错 啊,好古老的一个问题... 第二次出错的原因,是因为你创建Statement的时候,没有指定结果集(游标)模式! createStatement(int resultSetType, int resultSetConcurrency) resultSetType 就是结果集模式,取值范围是:ResultSet.TYPE_FORWARD_ONLY: cursor may move only forwar

ResultSet can not re-read row data for column 1.

error:ResultSet can not re-read row data for column 1. 将数据类型改为varchar(max)后,查询数据错误 改正:将jdbc驱动改为jtds驱动,成功解决.

如何获取ResultSet的行数和列数

当我们执行数据库查询返回一个ResultSet的时候,很多情况下我们需要知道这个ResultSet的大小,即它的行数和列数.我们知道它的列数可以通过resultSet.getMetaData().getColumnCount()很容易地得到,然而,java API没有提供直接访问ResultSet行数的接口. 这个时候,有三个办法可以解决: 1.改用select count语句,然后直接从ResultSet里面获取结果: try { Statement statement = connectio

使用ResultSet,写了一个通用的查询方法

此方法很烂,以后优化 /** * 通用的查询方法:SELECT */ @SuppressWarnings({ "unchecked", "rawtypes" }) public List testResultSet(String sql) { Connection connection = null; Statement statement = null; ResultSet rs = null; try { // 1.获取Connection connection

ResultSet相关ResultSetMetaData详细

ResultSet相关ResultSetMetaData详细 DatabaseMetaData 有关整个数据库的信息:表名.表的索引.数据库产品的名称和版本.数据库支持的操作. ResultSet 关于某个表的信息或一个查询的结果.您必须逐行访问数据行,但是您可以任何顺序访问列. ResultSetMetaData 有关 ResultSet 中列的名称和类型的信息. 尽管每个对象都有大量的方法让您获得数据库元素的极为详细的信息,但在每个对象中都有几种主要的方法使您可获得数据的最重要信息.然而,如