我有一个早期工作正常的java程序现在给出了奇怪的错误

时间:2013-11-11 07:00:48

标签: java jdbc

我有一个早期工作正常的java程序现在给出了奇怪的错误。我不确定原因。流程是将表名传递给此函数,并从其他函数中获取列名。然后形成sql并运行以在HTML表中生成数据。这是整个java程序的一个功能。使用的java版本是1.6(不能升级到1.7,因为1.6是所有项目中使用的标准)。当我在google上检查时,如果你从结果集中多次获取同一列,则会出现此错误,但在我的情况下,我只获取一次列。

public static String GetData(String TableName) throws IOException, SQLException
    {
    Class.forName( "sun.jdbc.odbc.JdbcOdbcDriver" );
    c = DriverManager.getConnection( "jdbc:odbc:dbname","username","password" );

    Statement stmnt = c.createStatement();

    try
    {

    String colname= GetColName(stmnt,TableName);

    String colarray[] = colname.split(",");

    htmlheader+="<table border=\"1\">";
    htmlheader+="<caption><b>"+TableName +"</b></caption>";
    htmlheader+="<tr>";

      for (int n=0; n < colarray.length ; n++)
      {
          htmlheader+="<th>"+colarray[n]+"</th>";

      }
      htmlheader+="</tr>";      
    String sqlqry= "Select "+colname + " from "+TableName +";" ;

    ResultSet result = stmnt.executeQuery(sqlqry);

    while (result.next() )
        {               htmlheader+="<tr>";

          for (int n=0; n < colarray.length ; n++)
          {
              htmlheader+="<td>"+result.getString(colarray[n])+"</td>";**//Exception is coming in this line**

          }
          htmlheader+="</tr>";

        }
      htmlheader+="</table>";
      } 

    catch( Exception e )
    {
        e.printStackTrace();
    }
}

错误是

java.sql.SQLException: No data found
    at sun.jdbc.odbc.JdbcOdbc.standardError(JdbcOdbc.java:7138)
    at sun.jdbc.odbc.JdbcOdbc.SQLGetDataString(JdbcOdbc.java:3907)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getDataString(JdbcOdbcResultSet.java:5698)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:354)
    at sun.jdbc.odbc.JdbcOdbcResultSet.getString(JdbcOdbcResultSet.java:411)

请建议。
例外情况就在这一行

htmlheader+="<td>"+result.getString(colarray[n])+"</td>"

1 个答案:

答案 0 :(得分:1)

您的问题正在发生,因为您尝试使用getString colarray[n]处的TYPE_FORWARD_ONLY直接访问结果。 Java无法识别您需要的数据,因为为访问数据而创建的游标是以Statement stmnt = c.createStatement();方式创建的。 将Statement s = c.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);更改为{{1}}