public PageBean listData(String page)throws Exception
{
try
{
PageBean pageBean=new PageBean(this);
int pageNum=Integer.parseInt(page);
Statement stmt=conn.createStatement();
String strSql="select top "+pageNum*pageBean.rowsPerPage+" * from topic order by pubtime";
ResultSet rset=stmt.executeQuery(strSql);
int i=0;

while(rset.next())
{

if(i>(pageNum-1)*pageBean.rowsPerPage-1)
{
System.out.println(rset.getString("id"));//此行正常输出
Object obj[]=new Object[4];

obj[0]=new String(rset.getString("title").toString());

obj[1]=new String(rset.getString("author").toString());


obj[2]=new String(rset.getDate("pubtime").toString());

//obj[3]=new String(rset.getString("id").toString()); //这行出错


v.add(obj);//v是我前面定义的一个集合
}
i++;
}

rset.close();
stmt.close();
            conn.close();
pageBean.curPage=pageNum;
pageBean.data=v;
return pageBean;
}
catch(Exception e)
{
    e.printStackTrace();
throw e;

}
}大侠帮看看,数据库书sqlserver,字段“id”的类型是nvarchar的;异常报的是这行obj[3]=new String(rset.getString("id").toString()); 意思是说 在字段“id”查不到源数据,把这行注释掉后就一切正常了。
高手指点下为什么, System.out.println(rset.getString("id"));这行正常输出我插直的时候“id”(类型是nvarchar)这个字段是用的“new java.util.Date().getTime()”

解决方案 »

  1.   

    Java API上这样说:
    For maximum portability, result set columns within each row should be read in left-to-right order, and each column should be read only once.
    也就是:
    为了最大的可移植性,resultSet每一行上的列应该按照从左到右的顺序来读取,且每一列只读取一次对于你的问题
    你应该在System.out.println(rset.getString("id"));这一行把读取出来的String保存在变量中,
    然后在后面就可以进行随便操作了...