写程序时,要求先对Oracle进行select,如果有记录,则运行后面的代码,如果没有记录则不运行。
于是我用了这样的方法:(不用select count(*)as num from tb,是为了不想多一次select操作以增加数据库的负担)
ResultSet rs1=null;
rs1=st.executeQuery("select * from tb");
rs1.last();
sqlnum=rs1.getRow()-1;  //此处本来没有减1,但第一次sqlnum值为0,以后即使没有记录,该值也会为1
rs1.first();
if (sqlnum>0)
{
  ..........
 }
请教各位大侠,这个到底是哪里有问题?难道是rs1的指针有问题?敬请指教,或有无其他更好的办法(不用select),谢谢啦!!!

解决方案 »

  1.   

    判断有没有值用if(rs.next())就可以了.
    你这样写法要求rs为scrollable的,在st创建时指定参数.具体请参考java doc中ResultSet和Statement及Connection.
      

  2.   

    last,first操作是极为消耗资源的,不建议采用。
      

  3.   

    今天我的个人博客 David new City(www.davidnewcity.com) 正式开通,他是我的新城市,也希望是大家的一个新城市。我希望可以和所有坦诚相待的人一起分享我的思想、一起经历我的经历。在这个新的城市里大家可以彼坦诚相待的互相学习、互相提高。一个人的力量虽小,但是联合大家的思想联合大家的行动,我们每个人内心最神圣的追求终究是可以实现的,一直前进。 
      

  4.   

    谢谢liu_you(滴水藏海),我的Statement是这样设的
    Statement st=null;
    st=smgwpool.createStatement.ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
    我在select后,就是用的while(rs1.next())但是我要在这个while外面先生成一个文件,把结果集的内容一条一条地写入文件,注:如果没有记录就不写入文件!请问这个有什么办法吗?
    测试中,数据库中有一条记录,但是
    sqlnum=rs1.getRow();
    rs1.last();
    sqlnum=rs1.getRow();
    第一个sqlnum=0
    第二个sqlnum=1
    怎么会这样?谢谢!
      

  5.   

    现在第一个sqlnum=0,第二个sqlnum=1,数据库记录是有1条,但是这一条就是取不到,不知为何?在线等高手指点,谢谢!
    下面的判断条件if(sqlnum>0)...