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上搜了好久,无果。
望高手相救,不甚感激,毕业设计相关。
在下是新手,分不多,但必定有多少就给多少
{
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上搜了好久,无果。
望高手相救,不甚感激,毕业设计相关。
在下是新手,分不多,但必定有多少就给多少
if(page_rs.next())
page_rs.close();
而且你这样做也有问题,怎么不调用page_rs就关闭了?
因为你返回的 page_rs是为空的。
page_rs.close(); 把 a_SQL= new String(a_SQL.getBytes("iso8859-1"), "GBK").trim();
试试看.
if(page_rs==null)
{
System.out.println("page_rs is null!");
}
这个只是个方便测试的片段,实际上我是用完了再close掉resultset的
你先判断是否为null,再关闭!
if (page_rs!=null)
{
page_rs.close();
}
结果还是一样的
只要移动下结果集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;
}
}