有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java ResultSet元数据未返回第一行

此代码返回除第一行之外的每一行。我看不出有什么问题?我怎样才能让它包括第一个呢

stmt = con.createStatement();  

ResultSet res=stmt.executeQuery("SELECT * FROM Orders ORDER BY OrderID");

if (res.next())
{
    ResultSetMetaData rsmd=res.getMetaData();
    int columnCount=rsmd.getColumnCount();
    for (int i = 1; i<= columnCount; i++) {
        columnHeading=columnHeading+"\t"+rsmd.getColumnName(i); 
    }
    System.out.println(columnHeading);
    while(res.next()) {
        for (int i= 1; i<= columnCount; i++) {                            
            System.out.print("\t"+res.getString(i));
        }
    System.out.println("\n");
    }
}

共 (5) 个答案

  1. # 1 楼答案

    你给res.next()打了两次电话——一次是在这里:

    if (res.next())
    

    一旦来到这里:

    while (res.next())
    

    if语句和while语句之间,您正在“查看”第一行——但当您进入while循环体时,您已经在第二行了

    最简单的解决办法可能是改变:

    while (res.next())
    {
    }
    

    致:

    do
    {
    } while (res.next());
    
  2. # 2 楼答案

    调用if(res.next)时,您正在移动ResultSet

    这意味着当你进入循环时,你已经落后一行了

    把你的循环改成一段时间

    do {
    
    } while (res.next());
    

    这将在对^{的第一个循环调用之前运行代码

  3. # 3 楼答案

    res.next()将自动将结果集移动到上。在打印任何行之前,首先在if语句中调用它,然后在while语句中再次调用它,由于在打印任何行之前调用它两次,因此缺少第一行

    while更改为do..while,这应该按照您的意愿进行

  4. # 4 楼答案

    试试这个。我希望它能奏效

    stmt = con.createStatement();  
    
    ResultSet res=stmt.executeQuery("SELECT * FROM Orders ORDER BY OrderID");
    
    if (res != null)
    {
    ResultSetMetaData rsmd=res.getMetaData();
    int columnCount=rsmd.getColumnCount();
    for (int i = 1; i<= columnCount; i++) {
        columnHeading=columnHeading+"\t"+rsmd.getColumnName(i); 
    }
    System.out.println(columnHeading);
    while(res.next()) {
        for (int i= 1; i<= columnCount; i++) {                            
            System.out.print("\t"+res.getString(i));
        }
     System.out.println("\n");
     }
    }
    
  5. # 5 楼答案

    这里的问题是ResultSet的索引不是以0开头的。因此 如果尚未全局声明ResultSet,则必须按以下方式编写: ResultSet res=null; 否则就行了