public ResultSet SQLQuery(String a_SQL)
{
try{
page_con=getConnection();
page_st=page_con.createStatement  (ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
a_SQL= new String(a_SQL.getBytes("cp850"), "GBK").trim();
page_rs=page_st.executeQuery(a_SQL);
page_rs.close();
 }
 catch(Exception ex)
 {
System.err.println("查询失败:"+ex.getMessage());
                        ex.printStackTrace();
 }
return page_rs;
}
一执行到page_rs.close();这句 就会出现如下异常
---------- java package ----------
查询失败:null
java.lang.NullPointerException
at com.sybase.jdbc3.tds.TdsResultSet.next(TdsResultSet.java:429)
at com.sybase.jdbc3.tds.TdsResultSet.close(TdsResultSet.java:568)
at com.sybase.jdbc3.jdbc.SybResultSet.Dead(SybResultSet.java:1618)
at com.sybase.jdbc3.jdbc.SybResultSet.close(SybResultSet.java:1686)
at com.sybase.jdbc3.jdbc.SybResultSet.close(SybResultSet.java:213)
at org.gzaic.db.DBAgent.SQLQuery(DBAgent.java:42)
at org.gzaic.db.TestMain.main(TestMain.java:8)输出完成 (耗时 0 秒) - 正常终止
这个问题我在baidu上搜了好久,无果。
望高手相救,不甚感激,毕业设计相关。
在下是新手,分不多,但必定有多少就给多少

解决方案 »

  1.   

    你得移动下page_rs的指针  
       if(page_rs.next())
          page_rs.close();
    而且你这样做也有问题,怎么不调用page_rs就关闭了?
      

  2.   

    page_rs=page_st.executeQuery(a_SQL); 
    因为你返回的 page_rs是为空的。
    page_rs.close(); 把 a_SQL= new String(a_SQL.getBytes("iso8859-1"), "GBK").trim(); 
    试试看.
      

  3.   

    真的不为空吗?奇怪了
    if(page_rs==null)
    {
      System.out.println("page_rs is null!");
    }
      

  4.   

    我试下。
    这个只是个方便测试的片段,实际上我是用完了再close掉resultset的
      

  5.   

    结果集是空的~
    你先判断是否为null,再关闭!
      

  6.   

    就算是改成
    if (page_rs!=null)
    {
    page_rs.close();
    }
    结果还是一样的
      

  7.   

    试了下,果然是可以的。
    只要移动下结果集page_rs的指针就可以了。
    在我的程序中,有如下的函数
            /*参数 要查询的表的名称table
    *返回值 查询的表的所有列名
    *columName   
    */
    public String[] getColumnName(String tableName)throws Exception
    {
    int count=0,i=0;
    String sql="select * from "+tableName;
    ResultSetpage_rs = page_agentsj.SQLQuery(sql);
    ResultSetMetaData page_rsmd = page_rs.getMetaData();
    count=page_rsmd.getColumnCount();
    columnName = new String[count];
    for (i=0;i<count ;i++ )
    {
    columnName[i]=page_rsmd.getColumnName(i+1);
    }
    //page_agentsj.close();这句里面调用了resultset的close()方法,但结果集的指针还没有移动过,
                                                所以就出错了,但是不移动指针为什么就会出错呢,估计还得在看下了,但还是先结贴了,谢谢大家的帮忙
                     return columnName;
    }
            //page_agentsj里面的close()方法
            public void close() throws Exception{
    if((page_rs!= null)){
    page_rs.close();
    page_rs = null;
    }
    if(page_st!= null){
    page_st.close();
    page_st = null;
    }
    if(page_con!= null){
    page_con.close();
    page_con= null;
    }
     }