为提高效率,提问时请提供以下信息,问题描述清晰可优先响应。 【DM版本】:v8 【操作系统】: 【CPU】: 【问题描述】*:有jdbc中使用游标的例子吗?我在代码中进行select查询获取到rs后,设置游标位置,在进行next时报错,提示如下。 Caused by: java.sql.SQLException: 无效的行号
检查一下是不是那个地方代码有问题,这里有一个JDBC游标分页方法。
package jdbcUtils_preparedStatement;
import org.junit.jupiter.api.Test;
import java.sql.*;
public class DMJDBC {
@Test public void getData() throws SQLException { Connection con = null; int startNo = 1; int maxCount =2; try { con = JdbcUtils.getConnection(); String sql = "select * from t_user "; PreparedStatement pstat = con.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); //最大查询到第几条记录 pstat.setMaxRows(startNo+maxCount-1); ResultSet rs = pstat.executeQuery(); //将游标移动到第一条记录 rs.first();
// 游标移动到要输出的第一条记录 rs.relative(startNo-2); while(rs.next()) System.out.println(rs.getObject(1)); } catch (SQLException e) { e.printStackTrace(); } } /** * 从数据库中查询所有记录,然后通过游标来获取所需maxCount条记录 */ @Test public void getDataFromAll(){ Connection con = null; PreparedStatement pst = null; ResultSet re = null; int startNo = 1; int maxCount =2; try { con = JdbcUtils.getConnection(); String sql = "select t_user.stu_number,t_user.username,t_user.password,t_user.email from t_user "; PreparedStatement pstat = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); ResultSet rs = pstat.executeQuery(); rs.first(); rs.relative(startNo-1); int i = startNo-1; while(i < startNo + maxCount-1 && !rs.isAfterLast()){ System.out.println(rs.getObject(2)); i++; rs.next(); } } catch (SQLException e) { e.printStackTrace(); } } }
检查一下是不是那个地方代码有问题,这里有一个JDBC游标分页方法。
package jdbcUtils_preparedStatement;
import org.junit.jupiter.api.Test;
import java.sql.*;
public class DMJDBC {
// 游标移动到要输出的第一条记录
rs.relative(startNo-2);
while(rs.next())
System.out.println(rs.getObject(1));
} catch (SQLException e) {
e.printStackTrace();
}
}
/**
* 从数据库中查询所有记录,然后通过游标来获取所需maxCount条记录
*/
@Test
public void getDataFromAll(){
Connection con = null;
PreparedStatement pst = null;
ResultSet re = null;
int startNo = 1;
int maxCount =2;
try {
con = JdbcUtils.getConnection();
String sql = "select t_user.stu_number,t_user.username,t_user.password,t_user.email from t_user ";
PreparedStatement pstat = con.prepareStatement(sql, ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);
ResultSet rs = pstat.executeQuery();
rs.first();
rs.relative(startNo-1);
int i = startNo-1;
while(i < startNo + maxCount-1 && !rs.isAfterLast()){
System.out.println(rs.getObject(2));
i++;
rs.next();
}
} catch (SQLException e) {
e.printStackTrace();
}
}
}