-1

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

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>"
4

1 回答 1

1

出现问题是因为您尝试使用getStringat直接访问结果colarray[n]。Java 无法识别您需要的数据,因为为访问数据而创建的游标是以某种TYPE_FORWARD_ONLY方式创建的。更改Statement stmnt = c.createStatement();Statement s = c.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);

于 2014-08-24T18:28:27.403 回答