调用rs.getRow()方法查看结果集的行数,有数据返回,但是while(rs.next())为false还是false
时间: 2024-02-19 13:00:31 浏览: 57
如果 `rs.getRow()` 方法能够返回结果集的行数,说明查询结果不为空,但是 `while(rs.next())` 为 false,可能有以下几种原因:
1. 你在遍历结果集时,已经把光标移到了结果集的末尾,导致无法再继续遍历。你可以尝试使用 `rs.beforeFirst()` 方法,把光标移到结果集的开头,再重新遍历一遍结果集。
2. 你在遍历结果集时,使用了 `rs.absolute(row)` 方法或者 `rs.last()` 方法把光标移到了结果集的某一行,但是这一行的数据并不符合你的查询条件,所以 `rs.next()` 返回 false。你可以检查一下查询条件是否正确,或者尝试使用 `rs.first()` 方法,把光标移到结果集的第一行,再重新遍历一遍结果集。
3. 你在遍历结果集时,发生了异常,导致程序跳出了循环。你可以检查一下代码中是否有异常处理语句,并且确保程序能够正确处理异常,不会中断遍历结果集的过程。
如果你仍然无法解决问题,可以考虑提供更多的代码和错误信息,我可以帮你进一步分析。
相关问题
public void adminerDate(){ String sql="select * from adminerinfo"; try { conn= DriverManager.getConnection("jdbc:mysql://localhost:3306/dormitory_management_system?useSSL=false&serverTimezone=UTC&allowPublicKeyRetrieval=true","root","Maoxingyumysql520!"); pstmt= conn.prepareStatement(sql,ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY); rs=pstmt.executeQuery(); rs.last(); //获取表格中的列数及列名 int n=rs.getRow(); Object data[][]=new Object[n][4]; buTable=new JTable(data,new String[] {"\u5de5\u53f7", "\u5bc6\u7801", "\u59d3\u540d", "\u8054\u7cfb\u7535\u8bdd"}); rs.beforeFirst(); int i=0; while (rs.next()){ data[i][0]=rs.getString(1); data[i][1]=rs.getString(2); data[i][2]=rs.getString(3); data[i][3]=rs.getString(4); i++; } rs.close(); conn.close(); }catch (SQLException e){ e.printStackTrace(); } System.out.println("adminerDate()被调用了"); }
这段代码是用来查询数据库中的adminerinfo表,并将查询结果显示在一个JTable对象中。其中,conn表示数据库连接对象,pstmt表示PreparedStatement对象,rs表示ResultSet对象,通过执行SQL语句获取查询结果。然后,将查询结果逐行读取并存储到一个二维数组中,最后将该二维数组作为参数传递给JTable对象,生成一个表格显示查询结果。
package project; import java.sql.*; public class useOpea { public int query(String sql,Object[] objects) throws SQLException { int n=0; Connection conn=DriverManager.getConnection("jdbc:mysql://192.168.24.224:3306/dorm","root","123456"); PreparedStatement pstm=conn.prepareStatement(sql,1004,1007); if(objects!=null && objects.length>0){ for(int i=0;i<objects.length;i++ ) { pstm.setObject(i+1,objects[i]); } } ResultSet rs=pstm.executeQuery(); rs.last(); n=rs.getRow(); rs.close(); pstm.close(); conn.close(); return n; } public Object[][] queryToArray(String sql,Object[]pars) throws SQLException{ Connection conn=DriverManager.getConnection("jdbc:mysql://192.168.24.224:3306/dorm","root","123456"); PreparedStatement pstm=conn.prepareStatement(sql,1004,1007); if(pars!=null && pars.length>0){ for(int i=0;i<pars.length;i++ ) { pstm.setObject(i+1,pars[i]); } } ResultSet rs=pstm.executeQuery(); rs.last(); int n=rs.getRow(); ResultSetMetaData resultSetMetaData=rs.getMetaData(); int m=resultSetMetaData.getColumnCount(); Object[][]data=new Object[n][m]; rs.beforeFirst(); int i=0; while(rs.next()) { for(int j=0;j<m;j++) { data[i][j]=rs.getObject(j+1); i++; } } return data; } public static void main(String[]args) throws SQLException { useOpea userOpertion = new useOpea(); Object[][] data= userOpertion.queryToArray("select * from student", args); for(int i=0;i<data.length;i++) { for(int j=0;j<data[i].length;j++) { System.out.println(data[i][j]+" "); } } } }有什么错误
这段程序有一些潜在的问题,具体如下:
1. 在queryToArray方法中,如果查询结果集为空,即ResultSet.getRow()返回0,那么应该直接返回null,否则在后面的代码中会出现数组下标越界异常。
2. 在queryToArray方法中,内部循环的索引i应该累加在内层循环的末尾,否则会导致数据填充不完整。
3. 在main方法中,调用queryToArray方法时传入的参数args应该为null,否则会导致SQL语句解析错误。
4. 在main方法中,输出结果时应该使用print而不是println,否则会导致每个元素都换行输出。
综上所述,以下是修改后的程序代码:
```java
package project;
import java.sql.*;
public class useOpea {
public int query(String sql, Object[] objects) throws SQLException {
int n = 0;
Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.24.224:3306/dorm", "root", "123456");
PreparedStatement pstm = conn.prepareStatement(sql, 1004, 1007);
if (objects != null && objects.length > 0) {
for (int i = 0; i < objects.length; i++) {
pstm.setObject(i + 1, objects[i]);
}
}
ResultSet rs = pstm.executeQuery();
rs.last();
n = rs.getRow();
rs.close();
pstm.close();
conn.close();
return n;
}
public Object[][] queryToArray(String sql, Object[] pars) throws SQLException {
Connection conn = DriverManager.getConnection("jdbc:mysql://192.168.24.224:3306/dorm", "root", "123456");
PreparedStatement pstm = conn.prepareStatement(sql, 1004, 1007);
if (pars != null && pars.length > 0) {
for (int i = 0; i < pars.length; i++) {
pstm.setObject(i + 1, pars[i]);
}
}
ResultSet rs = pstm.executeQuery();
rs.last();
int n = rs.getRow();
if (n == 0) {
return null;
}
ResultSetMetaData resultSetMetaData = rs.getMetaData();
int m = resultSetMetaData.getColumnCount();
Object[][] data = new Object[n][m];
rs.beforeFirst();
int i = 0;
while (rs.next()) {
for (int j = 0; j < m; j++) {
data[i][j] = rs.getObject(j + 1);
}
i++;
}
return data;
}
public static void main(String[] args) throws SQLException {
useOpea userOpertion = new useOpea();
Object[][] data = userOpertion.queryToArray("select * from student", null);
if (data != null) {
for (int i = 0; i < data.length; i++) {
for (int j = 0; j < data[i].length; j++) {
System.out.print(data[i][j] + " ");
}
System.out.println();
}
}
}
}
```
阅读全文