方法是通过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并实现多数据源的动态切换,同时支持分页查询是一项常见的需求。以下将详细阐述这个过程中的关键步骤和技术要点。 首先,我们需要引入必要的Maven依赖。这里提到了四个关键...
标题中的“jdbc分页实例sqlserver2000”指的是使用Java Database Connectivity (JDBC) API来实现数据库分页查询的示例,特别是在SQL Server 2000这个特定的数据库管理系统上。JDBC是Java中用于与各种类型数据库交互...
- 然后,再次使用子查询,将内层查询的结果作为外层查询的数据源,并通过`WHERE`子句限制`ROWNUM`的范围,从而实现分页效果。 3. **变量计算**:题目中还提到了一段Java代码,用于计算分页所需的`pageCount`(即总...
在Spring Boot中,我们可以配置多个DataSource bean,并在MyBatis-Plus中指定使用哪个数据源。这样,在同一个应用中,可以根据业务需求灵活切换数据源,提高了系统的灵活性。 总的来说,MyBatis-Plus简化了MyBatis...
具体实现细节需要查看源代码以了解更多信息,如分页查询是否考虑了性能优化(如预编译SQL,使用存储过程等),是否支持动态分页参数,以及是否兼容多种数据库等。 总的来说,Java JDBC分页是数据库操作中的常见需求...
Java JDBC 分页查询是数据库操作中的常见需求,用于在大量数据中实现高效的页面导航。...这个例子对于初学者理解JDBC分页查询和数据源管理非常有帮助,同时也提醒我们在实际开发中应关注代码的可扩展性和复用性。
在这个例子中,使用了`DbPool`类来获取数据库连接,该类通过JNDI(Java Naming and Directory Interface)查找数据源(DataSource)。在`context.xml`文件中配置了数据源的详细信息,包括驱动、URL、用户名和密码。 ...
在本项目中,"Servlet+JSP+JDBC实现增删查(真分页)改j2ee小项目"是一个基于Java技术栈的Web应用程序,主要用于演示如何在J2EE环境中进行数据操作,包括添加、删除、查询和更新功能,并且实现了真正的分页功能。...
4. **执行查询**:使用Java的JDBC API执行SQL语句,获取分页数据和总记录数。记住,对于性能优化,应尽可能地减少数据库的交互次数,比如可以一次性获取总页数。 5. **渲染结果**:在JSP页面上,使用自定义标签`...
在IT行业中,分页是一种非常常见的技术,...总之,“分页大全”涵盖了从基本的JDBC分页到高级的Struts框架中的分页实现,以及分页标签的灵活使用。理解并掌握这些知识,对于提升Java Web应用的性能和用户体验至关重要。
本文将深入探讨如何使用Java实现基于数据库的分页查询。 首先,理解分页查询的基本概念。分页是将大量数据分为多个部分(页)进行展示,每个部分包含一定数量的记录。通常,每一页的大小(即每页显示的数据量)是...
- 执行JDBC查询:使用PreparedStatement设置LIMIT和OFFSET参数,执行SQL获取分页数据。 - 显示结果:JSP将查询结果渲染到页面上,同时提供导航链接,如“上一页”、“下一页”。 5. 分页组件: 分页组件是预先...
在分页示例中,这个表将作为数据源,提供查询和分页的数据。 - **说明.txt**:这个文件应该包含了详细的步骤指南和解释,指导开发者如何运行和理解示例。 - **fenye_jsp**:这可能是分页功能的JSP文件,里面包含了...
3. **DAO层**:DAO负责与数据库的交互,实现SQL查询以获取分页数据。在使用JDBC(Java Database Connectivity)时,需要编写SQL语句,结合LIMIT或OFFSET子句来实现分页查询。 4. **SQL分页**:在SQL中,可以使用`...
在这个项目中,"JSP、JAVA分页显示动态数据"的源代码可能包含了以下组件: - 数据访问对象(DAO):包含执行SQL查询和处理结果集的方法。 - 控制器(Controller):处理HTTP请求,调用DAO方法,处理分页参数,并将...
5. **配置路由策略**:使用`AbstractRoutingDataSource`来实现数据源的动态切换。这个类可以根据一定的规则(如基于请求参数、线程绑定、自定义逻辑等)决定使用哪个数据源。 6. **业务代码**:在实际的Service层...
在上述代码中,我们创建了一个`DatabaseUtil`类,它可以根据提供的数据源名称初始化数据源,并提供了更新和查询数据的方法。此外,还提供了一个静态方法`getConnection()`来获取数据库连接,这在更复杂的应用场景下...
- 数据源适配器:根据不同的数据库实现具体的分页查询逻辑。 - 分页结果:封装查询结果和分页信息,如总记录数、总页数等。 5. **最佳实践**: - 避免一次性加载大量数据,以免内存溢出。 - 在前端处理分页时,...
在本文中,我们将深入探讨如何使用Spring Boot、MyBatis、Druid和PageHelper来实现多数据源分页。Spring Boot作为一个快速开发框架,简化了Java应用的搭建和配置过程,而MyBatis则是一个轻量级的ORM(对象关系映射)...
于是,我们可以使用多数据源来实现JDBC分页查询。 ```java private Map, DataSource> dataSources = new TreeMap, DataSource>(); public JdbcUtil(DataSource dataSource) { this.dataSource = dataSource; } ...