你的条件反了吧 String s="SELECT * FROM tbname WHERE keyword='value'"; ResultSet resultset=dbconn.ExeQuery(s); if(!resultset.next()){ s1="It's already exists!";//查询结果集为空 }else{ s1="OK!";//查询结果集不为空 }
我拿两种情况往上做调试,一种实际有,一种实际没有,得出同一种结果,"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 是永远不会为空的". 那我们如何判别呢? 我记得是可以这样做的,究竟是哪个地方可能有点错误.
String s="SELECT * FROM tbname WHERE keyword='value'"; ResultSet resultset=dbconn.ExeQuery(s); if(resultset.next()){ s1="It's already exists!"; }else{ s1="OK!"; }
String s="SELECT * FROM tbname WHERE keyword='value'";
ResultSet resultset=dbconn.ExeQuery(s);
if(!resultset.next()){
s1="It's already exists!";//查询结果集为空
}else{
s1="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 是永远不会为空的".
那我们如何判别呢?
我记得是可以这样做的,究竟是哪个地方可能有点错误.
String s="SELECT * FROM tbname WHERE keyword='value'";
ResultSet resultset=dbconn.ExeQuery(s);
if(resultset.next()){
s1="It's already exists!";
}else{
s1="OK!";
}
那就是说你的if(!resultset.next())
一直是false也就是resultset一直是非空的,你写出来的代码应该没问题,(虽然一般会写if(resultset.next()),但总是ok还是有问题的。)估计问题是连接数据库部分,或者数据库本身数据有问题。建议 把 resultset.getString("")出来,把if语句判断去掉,看看得到的String和数据库里面的是不是一样,以判断是不是数据库连接 或者 数据库本身数据 有问题。
结果是空的.为什么会这样?
--------------------
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;
}
--------------------
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=''
---------------------------------------
请问这说明什么?
ResultSet resultset=dbconn.ExeQuery(s);System.out.println(resultset.next());System抛出:
false
无论keyword是什么,都是false.
而相同的数据库连接,insert 是对的.
是否说明:ExeQuery有问题呢?
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"