java.sql.SQLException: [Microsoft][ODBC Driver Manager] 无效的描述符索引

Posted

技术标签:

【中文标题】java.sql.SQLException: [Microsoft][ODBC Driver Manager] 无效的描述符索引【英文标题】:java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid descriptor index 【发布时间】:2012-09-27 17:49:48 【问题描述】:

以下代码sn-p

    String query = " SELECT * FROM accessdb.user;";
    try
    
        ResultSet rs = statement.executeQuery(query);
        rs.first();
        String s = "";
        do
        

            s = s + rs.getInt(0) + "\t\t" + rs.getString(1) + "\t\t" 
                + rs.getString(2) + "\n";
            rs.next();
        
        while (!rs.isLast());
        System.out.println(s);
    
    catch (Exception ex)
    
        System.out.println("\nError for firing query");
    

产生以下异常

java.sql.SQLException: [Microsoft][ODBC Driver Manager] Invalid descriptor index

这是怎么引起的,我该如何解决?

【问题讨论】:

【参考方案1】:

rs.getInt(0)

JDBC 列索引从1 开始。所以你应该按如下方式检索数据:

s = s + rs.getInt(1) + "\t\t" + rs.getString(2) + "\t\t" + rs.getString(3) + "\n";

使用rs.get*() 中的列名要好得多,并且通常可以保护您的代码免受返回列顺序的任何更改。

【讨论】:

Thanx Vikdor 问题现已解决。我没有使用索引,而是使用了列的名称,这就是问题所在。【参考方案2】:

使用rs.get*() 中的列名要好得多,并且通常可以保护您的代码免受返回列顺序的任何更改。

我发现没有双引号的列名会引发同样的错误。

【讨论】:

以上是关于java.sql.SQLException: [Microsoft][ODBC Driver Manager] 无效的描述符索引的主要内容,如果未能解决你的问题,请参考以下文章

java.sql.SQLException:getShort() 的值无效 - ''

java.sql.SQLException: SQL 语句在 org.hsqldb.jdbc.JDBCUtil.sqlException 处关闭

Oracle DB:java.sql.SQLException:关闭连接

Cause: java.sql.SQLException: 请求的转换无效 ; uncategorized SQLException for SQL []; SQL state [99999]; er

java.sql.SQLException: Access denied for user 'root'@'d001' (using password: YES)(代码

java.sql.SQLException: ORA-00604: 递归 SQL 级别 1 发生错误