通过Java执行SQL查询时,获取错误为“ java.sql.SQLException:无效的列索引”

罗特雷

任何人都可以建议我在这里做错了什么,尝试在控制台中打印SQL查询输出,但错误为“ java.sql.SQLException:无效的列索引”。

import java.io.*;  
import java.sql.*;  

public class RetrieveFile {  
    public static void main(String args[]) throws Exception {
        try {
            Class.forName("oracle.jdbc.driver.OracleDriver");
            Connection con = DriverManager.getConnection("jdbc:oracle:thin:@123.43.23.43:8080/orcl", "Test", "*****");

            PreparedStatement ps = con.prepareStatement("select * from MSG where MSD='1234'");
            ResultSet rs = ps.executeQuery();
            // rs.next();//now on 1st row
            while (rs.next()) {

                int numberOfColumns = 0;
                for (int column = 1; column >= numberOfColumns; column++) {

                    if (column > 1)
                        System.out.print(", ");
                    System.out.print(rs.getString(column));
                }
            }

            con.close();

            // System.out.println("success" + (rs.getString(1)));
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
}  

我得到了部分响应,但最终收到以下错误。

错误:

null,1234、389,OUR,NOW,USD,0、0,FR1,wert,USD,0,null,0、0,null,DR,null,null,0、0,null,null,null,null, null,null,null,null,null,0、2、2019-06-11 00:00:00.0,null,null,null,null,null,null,null,java.sql.SQLException:oracle的无效列索引.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:112)位于oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:146)位于oracle.jdbc.driver.DatabaseError.throwSqlException(DatabaseError.java:208) RetrieveFile.main(RetrieveFile.java:20)处的oracle.jdbc.driver.OracleResultSetImpl.getString(OracleResultSetImpl.java:379)拾取JAVA_TOOL_OPTIONS:-Duser.home = C:\ Users \ 45060849

请在输出中包括味精的表结构。

德哈尔

如果您既不知道列数也不知道其数据类型,则必须通过进行检查ResultSetMetaData
下面的示例使用单独的方法执行此操作,该方法尚未考虑所有可能的SQL数据类型,但考虑了一些非常常见的数据类型。

public static void main(String args[]) throws Exception {
    try {
        Class.forName("oracle.jdbc.driver.OracleDriver");
        Connection con = DriverManager.getConnection("jdbc:oracle:thin:@123.43.23.43:8080/orcl", "Test", "*****");

        PreparedStatement ps = con.prepareStatement("select * from MSG where MSD='1234'");
        ResultSet rs = ps.executeQuery();

        try {
            printResultColumns(rs);
        } catch (SQLException e) {
            System.err.println(e.getMessage());
        }

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

您基本上可以请求列数,将其用作迭代边界,然后可以检查column的类型i由于用于不同数据类型的方法不同,因此需要这样做。

public static void printResultColumns(ResultSet resultSet) throws SQLException {
    ResultSetMetaData rsmd = resultSet.getMetaData();
    int columnCount = rsmd.getColumnCount();

    while (resultSet.next()) {
        // you get a single result row in here, not the entire ResultSet
        for (int i = 1; i <= columnCount; i++) {
            switch (rsmd.getColumnType(i)) {
            case Types.VARCHAR:
            case Types.LONGVARCHAR:
            case Types.CHAR:
                System.out.println(resultSet.getString(i));
                break;
            case Types.DOUBLE:
                System.out.println(resultSet.getDouble(i));
                break;
            case Types.INTEGER:
                System.out.println(resultSet.getInt(i));
                break;
            case Types.DATE:
                System.out.println(resultSet.getDate(i).toString());
                break;
            case Types.TIMESTAMP:
                System.out.println(resultSet.getTimestamp(i).toString());
                break;
            case Types.BOOLEAN:
                System.out.println(resultSet.getBoolean(i));
                break;
            case Types.DECIMAL:
            case Types.NUMERIC:
                System.out.println(resultSet.getBigDecimal(i));
                break;
            default:
                System.out.println("This column type (" 
                        + rsmd.getColumnTypeName(i)
                        + ") is currently not supported in method \"printResultColumns\""
                        + ".\nAdd it as case there.");
            }
        }
    }
}

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

原因:java.sql.SQLException:无效的列索引

我收到java.sql.sqlexception:使用CallableStatement的无效列索引错误

Java java.sql.SQLException:准备语句上的无效列索引

java.sql.SQLException:在Spring Boot应用程序中使用简单的select查询时,无效的列索引异常

PreparedStatementCallback;SQL[SQLStatememnt] 的无效结果集访问;嵌套异常是java.sql.SQLException:无效的列索引Spring Auth

错误:java.sql.SqlException:无效的列类型

日期格式错误java.sql.SQLException:无效的列类型

java.sql.SQLException:从 jdbc 执行包级别类型的过程时列类型无效

值java.sql.SQLException:无效的列名

Hibernate java.sql.SQLException:无效的列名

SQL 状态 [99999];错误代码 [17004]; 列类型无效;嵌套异常是 java.sql.SQLException: Invalid column type

java.sql.SQLException:即使我对列进行计数,列索引也超出范围,> 2> 1

列索引超出范围,3> 2。嵌套的异常是java.sql.SQLException:

Spring安全性:java.sql.SQLException:列索引超出范围,3> 2

java.sql.SQLException:列索引超出范围,8> 6

java.sql.SQLException:通过jdbcTemplate超出参数索引范围(1>参数数量,为0)

使用java servlet时SQL错误无效列

登录 sql 抛出 java.sql.SQLException:列索引超出范围,Spring Security 中的 3 > 2

SQL异常列无效,java sql语句

java.sql.SQLException无效的对象名称

java.sql.SQLException:调用中的无效参数:getBytes()

java.sql.SQLException:GET请求中getLong()的值无效

错误java.sql.SQLException:找不到列“ id”

java.sql.SQLException:在索引:1处缺少IN或OUT参数

java.sql.SQLException:参数索引超出范围

java.sql.SQLException:无法对PLSQL语句执行获取:next

SQL Server忽略varchar列上的索引,并从Java查询时执行tablescan

如何从 MyBatis 获取 Map<String, Integer> ?原因:java.sql.SQLException:getInt() 的值无效 - 'NONE'

cronjob java.sql.SQLException 上的错误:参数索引超出范围(1 > 参数数量,为 0)