SQL,JDBC"无效的列索引"简单查询错误

时间:2015-01-12 20:21:48

标签: java sql jdbc struts2 oracle-sqldeveloper

我是STRUTS和JDBC的新手,我的应用程序尝试连接到一个有3个表的简单数据库,现在所有人正在尝试查询只存储"第一个,姓氏的1个表和Id字段"

System.out.println("-------- Oracle JDBC Connection Testing ------");

            try {
                Class.forName("oracle.jdbc.driver.OracleDriver");
            } catch (ClassNotFoundException e) {
                System.out.println("Where is your Oracle JDBC Driver?");
                e.printStackTrace();
                return null;
            }

            System.out.println("Oracle JDBC Driver Registered!");

            try {
                connection = 
                    DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:xe","david","changeit");
            } catch (SQLException e) {
                System.out.println("Connection Failed! Check output console");
                e.printStackTrace();
                return null;
            }

            if (connection != null) {
                System.out.println("You made it, take control your database now!");
            } else {
                System.out.println("Failed to make connection!");
            }

如果匹配发生,我想获得1列的结果:

            String sql = "SELECT S_ID FROM Students WHERE firstname=? AND lastname=?";

            PreparedStatement ps = connection.prepareStatement(sql);
            ps.setString(1, firstname);
            ps.setString(2, lastname);

            rs = ps.executeQuery();

            while (rs.next()) {
                studentid = rs.getString(1);
                ret = SUCCESS;
            }
        } catch (Exception e) { ...

据我所知,连接已经完成, SQL查询

Select s_id from Students where firstname='first' and lastname='last';

在SQL Dev上运行时。工作并给我一个结果。

我没有真正得到一个堆栈跟踪,代码只是在' while(rs.next()){...'之前跳过。直接进入finally块

} catch (Exception e) {
        e.printStackTrace();
        ret = ERROR;
    } finally {
        if (connection != null) {
            try {
                connection.close();
            } catch (Exception e) {
            }
        }
    }

2 个答案:

答案 0 :(得分:1)

我不确定Oracle驱动程序的工作原理。但是下面的声明是我在Oracle网站上看到的。您是否获得非空结果集? 由于您没有在.next()上获得nullpointerexception,我想知道Oracle驱动程序是否返回空ResultSet,这可能会导致此问题。

  

http://docs.oracle.com/cd/B28359_01/java.111/b31224/getsta.htm

     

如果是标准JDBC驱动程序,则执行SQL字符串   不返回ResultSet对象,然后是executeQuery方法   抛出SQLException异常。如果是Oracle JDBC驱动程序,则   即使是executeQuery方法也不会抛出SQLException异常   正在执行的SQL字符串不返回ResultSet对象。

答案 1 :(得分:1)

就像我说的那样,我很擅长使用它。 问题是我的架构没有为其分配CONNECT角色。

解决方案以'SYSTEM'身份登录并将角色授予我的架构

grant connect to MY_SCHEMA;