最近开始使用带有Java和ResultSet的Oracle数据库,我要查询的表具有以下列结构:
USU_PASSWORD VARCHAR2(30 BYTE) NOT NULL
我的代码遇到的问题是,这个列已经用DES算法加密了,我的insert、update和delete查询运行得很好,但当我想查询以查找该列上具有某个值的行时,ResultSet上的"next"属性将变为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;
LOGINPREPARED_STATEMENT字符串为
"从usuario中选择*,其中USU_NOMBRE=?AND USU_PASSWORD=?"
我已经找到了解决方案,这是我的加密问题,我使用了名为md5hash的Oracle MD5函数,而不是DES算法,所以,我的查询看起来像
"SELECT * FROM USUARIO WHERE USU_NOMBRE = '%s' AND USU_PASSWORD = md5hash('%s')"