`
lph279430114
  • 浏览: 7750 次
  • 性别: Icon_minigender_1
  • 来自: 广州
社区版块
存档分类
最新评论

JDBC实现分页查询,同时使用动态数据源

阅读更多
方法是通过jdbc来实现分页的,这样做的目的是可以实现多数据库的情况下,都能使用的方法。
但是这个方法貌似会存在性能问题,因为结果集会全部数据查询出来...

public JSONObject query(JSONObject object, int pageIndex, int pageSize) {
    JSONObject result = new JSONObject();
    if(object == null || object.getBoolean("success") == false) {
        result.put("success", false);
        if(object == null) {
            result.put("msg", "没有成功获取到基本对象");
        } else if(object.getString("msg") != null) {
            result.put("msg", object.getString("msg"));
        }
    } else {
        Connection connection = null;
        PreparedStatement preparedStatement = null;
        //Statement statement = null;
        ResultSet rs = null;
        try {
            connection = createConnection(object.getString("className"), object.getString("url"), object.getString("user"), object.getString("pwd"));
            String sql = object.getString("sql");
            System.out.println(sql);
            preparedStatement = connection.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
            if(pageIndex == 1 && pageSize == 1) {
                rs = preparedStatement.executeQuery();
            } else {
                preparedStatement.setMaxRows(((pageIndex - 1) * pageSize) + pageSize);//查询的最大行数
                //preparedStatement.setMaxRows(pageSize);
                rs = preparedStatement.executeQuery();
                //rs.first();
                rs.absolute((pageIndex - 1) * pageSize + 1);//利用绝对定位定位到结果集的每页第二条数据
                rs.relative(-1);//利用结果集的相对定位定位到每页的第一条数据
            }
            JSONArray datas = new JSONArray();
            JSONArray data = null;
            ResultSetMetaData metaData = null;
            int colnumCount = 0;
            String colnumName = null;
            Object tmp = null;
            SimpleDateFormat dateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            Reader reader = null;
            BufferedReader bufferedReader = null;
            char[] chbTmp = null;
            StringBuffer sb = new StringBuffer();
            while(rs.next()) {
                //获取数据
                data = new JSONArray();
                metaData = rs.getMetaData();
                colnumCount = metaData.getColumnCount() + 1;
                for (int i = 1; i < colnumCount; i++) {
                    colnumName = metaData.getColumnName(i);
                    tmp = rs.getObject(colnumName);
                    if(tmp == null) {
                        data.add("");
                    } else {
                        if(tmp.getClass() == Timestamp.class) {
                            data.add(dateFormat.format(tmp));
                        } else if(tmp.getClass() == CLOB.class) {
                            chbTmp = new char[20];
                            reader = rs.getClob(colnumName).getCharacterStream();
                            bufferedReader = new BufferedReader(reader);
                            bufferedReader.read(chbTmp);
                            sb.delete(0, chbTmp.length);
                            sb.append(chbTmp);
                            data.add(sb.toString() + "...");
                        } else {
                            data.add(tmp);
                        }
                    }
                }
                datas.add(data);;
            }
            JSONArray colnums = new JSONArray();
            if(datas.size() > 0) {
                //获取列名
                metaData = rs.getMetaData();
                colnumCount = metaData.getColumnCount() + 1;
                for (int i = 1; i < colnumCount; i++) {
                    colnumName = metaData.getColumnName(i);
                    colnums.add(colnumName);
                }
            } else {
                colnums.add("没有成功获取列的信息");
            }
            result.put("colnum", colnums);
            result.put("datas", datas);
            result.put("success", true);
        } catch (ClassNotFoundException e) {
            e.printStackTrace();
            result.put("success", false);
            result.put("msg", e.getMessage());
        } catch (SQLException e) {
            e.printStackTrace();
            result.put("success", false);
            result.put("msg", e.getMessage());
        } catch (IOException e) {
            e.printStackTrace();
            result.put("success", false);
            result.put("msg", e.getMessage());
        } finally {
            close(connection, preparedStatement, rs);
        }
    }
    return result;
}
分享到:
评论

相关推荐

    SpringBoot整合mybatis-plus实现多数据源的动态切换且支持分页查询.pdf

    在SpringBoot项目中,整合Mybatis-Plus并实现多数据源的动态切换,同时支持分页查询是一项常见的需求。以下将详细阐述这个过程中的关键步骤和技术要点。 首先,我们需要引入必要的Maven依赖。这里提到了四个关键...

    jdbc分页实例sqlserver2000

    标题中的“jdbc分页实例sqlserver2000”指的是使用Java Database Connectivity (JDBC) API来实现数据库分页查询的示例,特别是在SQL Server 2000这个特定的数据库管理系统上。JDBC是Java中用于与各种类型数据库交互...

    jdbc 分页 sql语句

    - 然后,再次使用子查询,将内层查询的结果作为外层查询的数据源,并通过`WHERE`子句限制`ROWNUM`的范围,从而实现分页效果。 3. **变量计算**:题目中还提到了一段Java代码,用于计算分页所需的`pageCount`(即总...

    mybatis-plus分页查询 学习mybatis-plus在项目中的简单使用,代码生成器,分页查询,多数据源等

    在Spring Boot中,我们可以配置多个DataSource bean,并在MyBatis-Plus中指定使用哪个数据源。这样,在同一个应用中,可以根据业务需求灵活切换数据源,提高了系统的灵活性。 总的来说,MyBatis-Plus简化了MyBatis...

    java jdbc 分页

    具体实现细节需要查看源代码以了解更多信息,如分页查询是否考虑了性能优化(如预编译SQL,使用存储过程等),是否支持动态分页参数,以及是否兼容多种数据库等。 总的来说,Java JDBC分页是数据库操作中的常见需求...

    java jdbc 分页例子

    Java JDBC 分页查询是数据库操作中的常见需求,用于在大量数据中实现高效的页面导航。...这个例子对于初学者理解JDBC分页查询和数据源管理非常有帮助,同时也提醒我们在实际开发中应关注代码的可扩展性和复用性。

    struts2.0实现的数据分页实现及实现分页步骤

    在这个例子中,使用了`DbPool`类来获取数据库连接,该类通过JNDI(Java Naming and Directory Interface)查找数据源(DataSource)。在`context.xml`文件中配置了数据源的详细信息,包括驱动、URL、用户名和密码。 ...

    Servlet+JSP+JDBC实现增删查(真分页)改j2ee小项目

    在本项目中,"Servlet+JSP+JDBC实现增删查(真分页)改j2ee小项目"是一个基于Java技术栈的Web应用程序,主要用于演示如何在J2EE环境中进行数据操作,包括添加、删除、查询和更新功能,并且实现了真正的分页功能。...

    java自定义分页标签实现带条件的分页查询

    4. **执行查询**:使用Java的JDBC API执行SQL语句,获取分页数据和总记录数。记住,对于性能优化,应尽可能地减少数据库的交互次数,比如可以一次性获取总页数。 5. **渲染结果**:在JSP页面上,使用自定义标签`...

    分页大全(含JDBC分页 struts分页)

    在IT行业中,分页是一种非常常见的技术,...总之,“分页大全”涵盖了从基本的JDBC分页到高级的Struts框架中的分页实现,以及分页标签的灵活使用。理解并掌握这些知识,对于提升Java Web应用的性能和用户体验至关重要。

    源代码_JavaWeb实现分页查询_java_

    本文将深入探讨如何使用Java实现基于数据库的分页查询。 首先,理解分页查询的基本概念。分页是将大量数据分为多个部分(页)进行展示,每个部分包含一定数量的记录。通常,每一页的大小(即每页显示的数据量)是...

    jdbc+jsp分页组件+源代码

    - 执行JDBC查询:使用PreparedStatement设置LIMIT和OFFSET参数,执行SQL获取分页数据。 - 显示结果:JSP将查询结果渲染到页面上,同时提供导航链接,如“上一页”、“下一页”。 5. 分页组件: 分页组件是预先...

    jsp/servlet分页带查询示例

    在分页示例中,这个表将作为数据源,提供查询和分页的数据。 - **说明.txt**:这个文件应该包含了详细的步骤指南和解释,指导开发者如何运行和理解示例。 - **fenye_jsp**:这可能是分页功能的JSP文件,里面包含了...

    struts与jdbc的分页

    3. **DAO层**:DAO负责与数据库的交互,实现SQL查询以获取分页数据。在使用JDBC(Java Database Connectivity)时,需要编写SQL语句,结合LIMIT或OFFSET子句来实现分页查询。 4. **SQL分页**:在SQL中,可以使用`...

    JSP JAVA 分页显示动态数据(源代码)

    在这个项目中,"JSP、JAVA分页显示动态数据"的源代码可能包含了以下组件: - 数据访问对象(DAO):包含执行SQL查询和处理结果集的方法。 - 控制器(Controller):处理HTTP请求,调用DAO方法,处理分页参数,并将...

    mysql和Oracle的多数据源配置demo

    5. **配置路由策略**:使用`AbstractRoutingDataSource`来实现数据源的动态切换。这个类可以根据一定的规则(如基于请求参数、线程绑定、自定义逻辑等)决定使用哪个数据源。 6. **业务代码**:在实际的Service层...

    统一实现分页接口

    在上述代码中,我们创建了一个`DatabaseUtil`类,它可以根据提供的数据源名称初始化数据源,并提供了更新和查询数据的方法。此外,还提供了一个静态方法`getConnection()`来获取数据库连接,这在更复杂的应用场景下...

    java通用分页代码实例.rar

    - 数据源适配器:根据不同的数据库实现具体的分页查询逻辑。 - 分页结果:封装查询结果和分页信息,如总记录数、总页数等。 5. **最佳实践**: - 避免一次性加载大量数据,以免内存溢出。 - 在前端处理分页时,...

    SpringBoot+MyBatis+Druid+PageHelper实现多数据源并分页.docx

    在本文中,我们将深入探讨如何使用Spring Boot、MyBatis、Druid和PageHelper来实现多数据源分页。Spring Boot作为一个快速开发框架,简化了Java应用的搭建和配置过程,而MyBatis则是一个轻量级的ORM(对象关系映射)...

    java开发之Jdbc分页源码详解

    于是,我们可以使用多数据源来实现JDBC分页查询。 ```java private Map, DataSource&gt; dataSources = new TreeMap, DataSource&gt;(); public JdbcUtil(DataSource dataSource) { this.dataSource = dataSource; } ...

Global site tag (gtag.js) - Google Analytics