Java 使用ResultSet从Oracle数据库读取VARCHAR2

Java 使用ResultSet从Oracle数据库读取VARCHAR2,java,oracle,resultset,Java,Oracle,Resultset,最近开始使用带有Java和ResultSet的Oracle数据库,我要查询的表具有以下列结构: USU_PASSWORD VARCHAR2(30 BYTE) NOT NULL 我的代码存在的问题是,此列已使用DES算法加密, 我的insert、update和delete查询工作得很好,但是当我想要查询以查找此列上具有某个值的行时,ResultSet上的下一个属性将为null 当我试图从ResultSet中获取值时,它甚至没有进入while语句 while(resultSet.next(){ /

最近开始使用带有Java和ResultSet的Oracle数据库,我要查询的表具有以下列结构:

USU_PASSWORD VARCHAR2(30 BYTE) NOT NULL
我的代码存在的问题是,此列已使用DES算法加密, 我的insert、update和delete查询工作得很好,但是当我想要查询以查找此列上具有某个值的行时,ResultSet上的下一个属性将为null

当我试图从ResultSet中获取值时,它甚至没有进入while语句

while(resultSet.next(){ //Does not enter here, and the next property is null }
帮点忙就好了

重视

我在下面添加我的代码

Sesion sesion = null; 
    ResultSet rs = null; 
    try{
        rs = executePreparedStatement(LOGIN_PREPARED_STATEMENT, new String[]{nombreUsuario, pass});
        while(rs.next()){
            sesion = new Sesion(); 
            sesion.setCarCveElectoral(rs.getString("CAR_CVE_ELECTORAL"));
            sesion.setCarEstCve(rs.getString("CAR_EST_CVE"));
            sesion.setCarFechaInicio(rs.getDate("CAR_FECHA_INICIO"));
            sesion.setCarFechaTermino(rs.getDate("CAR_FECHA_TERMINO"));
            sesion.setCarPlzCve(rs.getString("CAR_PLZ_CVE"));
            sesion.setCarPreCve(rs.getString("CAR_PRE_CVE"));
            sesion.setCarPstCve(rs.getString("CAR_PST_CVE"));
        }
        return sesion; 
    }catch(Exception ex){

    }
其中executePreparedStatement函数代码为

ResultSet rs = null; 
    PreparedStatement ps = null;
    try{
        if(this.connection == null){
            if(getConnection()){
                ps = this.connection.prepareStatement(stmnt); 
                for(int i = 0; i < params.length; i ++)
                    ps.setString(i, params[i]);
                rs = ps.executeQuery(); 
            }else{
                System.out.println("No se pudo conectar a la base de datos"); 
            }
        }else{
            ps = this.connection.prepareStatement(stmnt);
            for(int i = 0; i < params.length; i ++)
                ps.setString(i + 1, params[i]);
            rs = ps.executeQuery(); 
        }
    }catch(SQLException ex){
        System.out.println("Ha ocurrido un error: " + ex.getMessage()); 
    }
    return rs; 
并且LOGIN_PREPARED_语句字符串为

从usuario中选择*其中USU_NOMBRE=?和USU_密码=


我已经找到了解决方案,这是我的加密问题,而不是DES算法,我使用了名为md5hash的Oracle MD5函数,因此,我的查询如下

"SELECT * FROM USUARIO WHERE USU_NOMBRE = '%s' AND USU_PASSWORD = md5hash('%s')"

如果您使用JDBC,请尝试使用PreparedStatement执行查询结果集是否每次只返回一条记录?我已经使用PreparedStatement进行了尝试,也是一样的,最奇怪的是结果集必须只返回一行,已经过测试,但没有,我还阅读了有关Oracle的VARCHAR2,将其作为字符串读取似乎有一些问题。您应该使用一个准备好的语句并绑定包括预哈希usu_密码值在内的值;但是,对于您所拥有的,您是否已经转储了最终格式化的字符串并尝试直接运行它?您还没有显示executeQuery调用,但您可能实际上正在分配其中一个调用的resultSet?在这里显示更多的代码可能很有用。当为您的问题提供更多信息时,不要将其添加到注释中,而是将其编辑到问题本身中。