有谁知道这问题(Java)(0分)

  • 主题发起人 主题发起人 enteraj
  • 开始时间 开始时间
E

enteraj

Unregistered / Unconfirmed
GUEST, unregistred user!
在Java查询中,怎样判断所查询的记录集为空。我是这样实现的,怎么不行乞死我!!!
temp="Select * from test where name="+"'"+sql_txt.getText()+"'";
ResultSet rst=smt.executeQuery(temp);
if (rst.wasNull()==false){ //注意就是这里
while(rst.next()){
istemp=rst.getString("name")+" "+rst.getString("sex");
chat_txt.append(istemp);
chat_txt.append(" ");
}
}
else
{
chat_txt.append("为空!");
}
 
你用错了。
rst.wasNull()是在rst.getXXX()韩素之后再调用,来判断是否取出了空值的。
下次用不熟悉的函数的时候应该先看看javaDoc,省得出错还不知道到哪儿查。
你现在是想得到rst的内容是否为空结果集,这个方法在不同的JDBC driver实现有不同。
比如DB2是用getNumberRowsInCache();
但有一个办法是都可行的,就是:
rs.last();
rowsCount=rs.getRow();
rs.beforeFirst();
(需要你的resultset支持ast()和beforeFirst()方法。)
然后判断rowsCount是否为0.
 
刚才试过还是不行,代码如下
Connection con=DriverManager.getConnection("jdbc:odbc:test");
if(!con.isClosed())
System.out.println("打开数据库成功");
Statement smt=con.createStatement();
temp="Select * from test where name="+"'"+sql_txt.getText()+"'";
ResultSet rst=smt.executeQuery(temp);
rst.last();
rowsCount=rst.getRow();
rst.beforeFirst();
if (rowsCount==0) {
chat_txt.append("为空!");
}
else
{
while(rst.next()){
istemp=rst.getString("name")+" "+rst.getString("sex");
chat_txt.append(istemp);
chat_txt.append(" ");
}
}
smt.close();
con.close();
 
那说什么错误信息呢?
还有,请不要用jdbc-odbc桥。应该用你用的数据库的正式的jdbc驱动包。
 
编译能过,在运行时出错信息为: Result set Type is TYPE_FORWARD_ONLY
(兄弟谢谢帮忙)
 
对呀。你的这个jdbc-odbc桥不能用beforeFirst()函数。,因为你取出的结果集是不支持
倒序存取结果集的。
你看:
(from :http://java.sun.com/j2se/1.3/docs/api/index.html)
代码:
public PreparedStatement prepareStatement(String sql,
                                          int resultSetType,
                                          int resultSetConcurrency)
                                   throws SQLException
其中不是指出
Parameters:
resultSetType - a result set type;
see ResultSet.TYPE_XXX
resultSetConcurrency - a concurrency type;
see ResultSet.CONCUR_XXX
你再看 ResultSet的javadoc:
static int TYPE_FORWARD_ONLY
The constant indicating the type for a ResultSet object whose cursor may move only forward.
static int TYPE_SCROLL_INSENSITIVE
The constant indicating the type for a ResultSet object that is scrollable but generally not sensitive to changes made by others.
static int TYPE_SCROLL_SENSITIVE
The constant indicating the type for a ResultSet object that is scrollable and generally sensitive to changes made by others.
你应该在con.PrepareStatement()的时候指定TYPE_SCROLL_INSENSITIVE 或者TYPE_SCROLL_SENSITIVE.
不过JDBC-ODBC很弱的,说不定不支持。
还是一句话,尽快换一个好点的jdbc driver.
 
兄弟,谢谢!!!
以后多多指教。
 
为什么不直接使用ResultSet.next()来判断呢?
if(rs.next()){

}
else
{ 为空}
当然必须是在打开数据库时使用,以后再用循环取各数据,效率比
{ …
rs.last();
rs.getRow();
rs.first();
… }
高多了!还没有JDBC版本问题!
 
zhuad是对的。
 
接受答案了.
 
后退
顶部