我写了一个DAO类,其中有一个boolean existObject(Object obj)方法用来判断指定的用户是否存在代码如下:
public boolean existObject(Object obj)  //ojb为传入的用户名
{
System.out.println("existObject(Object obj)");
String userName = (String)obj;
System.out.println(userName);
conn = DBConnect.getConnection();
System.out.println("getConnecgtioned");
try
{        //prop为一个Properties对象用于加载sqlkey.properties文件里的sql语句
prop.load(DBConnect.class.getResourceAsStream("sqlkey.properties"));
System.out.println("sqlkey.properties prop.loaded");
                  //判断是否存在指定SQL语句
if(prop.containsKey("userDao.selectByUserName"))
{
System.out.println("if prop.containsKey(userDao.selectByUserName true");
                           //取出指定的SQL语句
String sql = prop.getProperty("userDao.selectByUserName");
System.out.println(sql);
pst = conn.prepareStatement(sql);
System.out.println("psted");
pst.setString(1,userName);
System.out.println("pst.setString(1,userName)ed");
res = pst.executeQuery();  //执行查询
                            //if(pst.execute())
                            //{
                            //   res = pst.getResultSet();
                            //   System.out.println("res = pst.getResultSet()");
                            //}
System.out.println("res.getRow() = "+res.getRow());
                           // 判断是否只有一条记录
if(res.getRow()==1) is = true; 
else is = false;
System.out.println("pst.exectue()ed");
}
else
{        //不存在指定的SQL语句
System.out.println("if prop.containsKey(userDao.selectByUserName false");
}
}
catch(Exception e)
{
e.printStackTrace();
}
finally
{
try
{
if(res!=null) res.close();
if(pst!=null) pst.close();
}
catch(Exception ex)
{
ex.printStackTrace();
}
}
return is;
}
现在的问题是
查询语句已经取出并显示在调试信息里。
select * from userT where userName = ?
指定的用户名也已经传入,也显示在调试信息里了。
可是取出的记录集条数却是0
System.out.println("res.getRow() = "+res.getRow());
res.getRow() = 0
请大家帮我看看问题出在那里???????

解决方案 »

  1.   

    public int getRow() throws SQLException
    Retrieves the current row number. The first row is number 1, the second number 2, and so on.
      

  2.   

    第一次检索后,游标处于第一行之外,getRow自然是0,必须用next()方法移动到下一行才可以取,所以才有
    while(rs.next())
    {
       //处理 ....
    }
      

  3.   

    方法很多,比如:
    rs.last();      
    if (rs.getRow() == 1) is = true; // 仅有一条记录
    else is = false;
      

  4.   

    我执行到rs.last();时为什么出现
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Unsupported me
    thod: ResultSet.last
    这是怎么会事啊?
      

  5.   

    SQLException - if a database access error occurs or the result set type is TYPE_FORWARD_ONLY
      

  6.   

    另外你也可以这样判断if (rs.next())
    {
        if (rs.next()) is = false;  // 不止一条记录
        else is = true;
    }
    else 
       is = 无记录
      

  7.   

    大哥救救我吧!我用下面的SQL去取记录集数目
    select COUNT(*) from dbo.userT where userName = ?
    可执行到int i = res.getInt(1);
    就出意外:
    java.sql.SQLException: [Microsoft][SQLServer 2000 Driver for JDBC]Invalid operat
    ion for the current cursor position.
    用res.getString(1);也不行