if(!resultset.next()){
如果 rs.next 不是
也就是如果里面没有结果的话就执行
因为有
所以不执行
输出ok

解决方案 »

  1.   

    你的条件反了吧
    String s="SELECT * FROM tbname WHERE keyword='value'";
    ResultSet resultset=dbconn.ExeQuery(s);
    if(!resultset.next()){
    s1="It's already exists!";//查询结果集为空
    }else{
    s1="OK!";//查询结果集不为空
    }
      

  2.   

    我拿两种情况往上做调试,一种实际有,一种实际没有,得出同一种结果,"OK".
    以下我截自"java.com.cn":
    --------------------------------------------------------------------
    Q:我用 Statement stmt = dbConnection.createStatement(1005, 1008);
    ResultSet dataResultSet = stmt.executeQuery(SQL);
    怎样判断 dataResultSet 是否为空?A:
    public ResultSet executeQuery(String sql) throws SQLExceptionReturns:
    a ResultSet object that contains the data produced by the given query; never nullThrows:
    SQLException - if a database access error occurs or the given SQL statement produces anything other than a single ResultSet object所以,依据 API 的解释,dataResultSet 是永远不会为空的.另外,如果权限有问题或者是 sql 语句有误,会抛出异常.最后,如果没有数据或没有符合条件的数据,那末 dataResultSet 的值不为空.
    最后,你要用好 ResultSet.next() 来判断位置.
    public boolean next() throws SQLException
    Returns:
    true if the new current row is valid; false if there are no more rows
    -----------------------------------------------------------------------------
    是否因为"dataResultSet 是永远不会为空的".
    那我们如何判别呢?
    我记得是可以这样做的,究竟是哪个地方可能有点错误.
      

  3.   


    String s="SELECT * FROM tbname WHERE keyword='value'";
    ResultSet resultset=dbconn.ExeQuery(s);
    if(resultset.next()){
    s1="It's already exists!";
    }else{
    s1="OK!";
    }
      

  4.   

    怎么可能显示的都是ok?
    那就是说你的if(!resultset.next())
    一直是false也就是resultset一直是非空的,你写出来的代码应该没问题,(虽然一般会写if(resultset.next()),但总是ok还是有问题的。)估计问题是连接数据库部分,或者数据库本身数据有问题。建议 把 resultset.getString("")出来,把if语句判断去掉,看看得到的String和数据库里面的是不是一样,以判断是不是数据库连接 或者 数据库本身数据 有问题。
      

  5.   

    resultset.getString("")
    结果是空的.为什么会这样?
    --------------------
    String s="SELECT * FROM tbname WHERE keyword='value'";
    ResultSet resultset=dbconn.ExeQuery(s);
    --------------------
    是不是说明"ExeQuery"有问题?以下是"ExeQuery":
    --------------------
        public ResultSet ExeQuery(String s)
        {
            try
            {
                Statement statement = conn.createStatement(1005, 1008);
                rs = statement.executeQuery(s);
                statement.close();
                dcm.freeConnection("mysql", conn);
            }
            catch(SQLException sqlexception)
            {
                System.err.println("aq.executeQuery:" + sqlexception.getMessage());
            }
            return rs;
        }
    --------------------
      

  6.   

    新发现:
    String s="SELECT * FROM tbname WHERE keyword='tony'";
    ResultSet resultset=dbconn.ExeQuery(s);System.out.println(resultset);---------------------------------------
    System抛出:
    org.gjt.mm.mysql.jdbc2.ResultSet@13a53d //keyword='tony'
    org.gjt.mm.mysql.jdbc2.ResultSet@53fb57 //keyword=''
    ---------------------------------------
    请问这说明什么?
      

  7.   

    String s="SELECT * FROM tbname WHERE keyword='tony'";
    ResultSet resultset=dbconn.ExeQuery(s);System.out.println(resultset.next());System抛出:
    false
    无论keyword是什么,都是false.
    而相同的数据库连接,insert 是对的.
    是否说明:ExeQuery有问题呢?  
      

  8.   

    //以下是DBconn.java中的一段:
    public ResultSet ExeQuery(String s)
    {
        try
        {
            Statement statement = conn.createStatement(1005, 1008);
            rs = statement.executeQuery(s);
            System.out.println(rs.next());
            statement.close();
            dcm.freeConnection("mysql", conn);
        }
        catch(SQLException sqlexception)
        {
            System.err.println("aq.executeQuery:" + sqlexception.getMessage());
        }
        return rs;
    }
    -------------------------------------------------------
    //下面是查询过程:
    try
    {
        String s1 = "SELECT * FROM " + s + " WHERE account='" + s3 + "'";
        ResultSet resultset = dbconn.ExeQuery(s1);
        System.out.println(resultset.next());
        if(resultset.next())
        {
            s2 = "\u4E0D\u597D\u610F\u601D\uFF0C\u8BE5\u5E10\u53F7\u5DF2\u7ECF\u5B58\u5728\uFF01";
        } else
        {
            s2 = "\u606D\u559C\uFF01\uFF01\u8BE5\u5E10\u53F7\u8FD8\u6CA1\u6709\u4EBA\u4F7F\u7528\u3002";
        }
        resultset.close();
        resultset = null;
    }
    catch(SQLException sqlexception)
    {
        System.err.println("aq.executeQuery:" + sqlexception.getMessage());
    }
    ------------------------------------------------------------
    我加了两个system.out.println.
    结果发现问题出现了:
    在DBconn中(rs = statement.executeQuery(s);)可以得到正确的bool值,
    但在ResultSet resultset = dbconn.ExeQuery(s1);中却无论怎样都得到"false"