【问题标题】:Read VARCHAR2 from Oracle Database with ResultSet使用 ResultSet 从 Oracle 数据库中读取 VARCHAR2
【发布时间】:2014-10-06 17:00:28
【问题描述】:

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

USU_PASSWORD VARCHAR2(30 BYTE) NOT NULL

我的代码遇到的问题是该列已使用 DES 算法加密, 我的插入、更新和删除查询就像一个魅力一样工作,但是当我想查询以查找该列上具有某些值的行时,ResultSet 上的“下一个”属性变为空。

当我尝试从 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_STATEMENT 字符串是

“从 usuario 中选择 * USU_NOMBRE = ? AND USU_PASSWORD = ?”

【问题讨论】:

  • 如果您使用 JDBC,请尝试使用 PreparedStatement 执行查询docs.oracle.com/javase/tutorial/jdbc/basics/prepared.html
  • 你的resultSet每次只返回一条记录吗?
  • 我已经尝试过 PreparedStatement 并且是一样的,最奇怪的是 ResultSet 必须只返回一行,已经过测试,但它没有,我也在阅读关于 Oracle 的 VARCHAR2,看起来它有一些问题来阅读它作为一个字符串
  • 您应该使用准备好的语句并绑定值(包括预先散列的usu_password值);但是有了你所拥有的,你是否已经转储了最终格式化的字符串并尝试直接运行它?您还没有显示executeQuery() 呼叫,但大概您实际上是从其中一个分配resultSet?在这里显示更多代码可能会有用。
  • 向您的问题提供更多信息时,不要将它们添加到 cmets 中,将其编辑到问题本身中。

标签: java oracle resultset


【解决方案1】:

我已经找到了解决方案,这是我的加密问题,而不是 DES 算法,我使用了名为 md5hash 的 Oracle MD5 函数,所以,我的查询看起来像

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

【讨论】:

    猜你喜欢
    • 2014-10-02
    • 2013-03-26
    • 2020-06-26
    • 1970-01-01
    • 2021-06-24
    • 1970-01-01
    • 1970-01-01
    • 2019-01-22
    • 1970-01-01
    相关资源
    最近更新 更多