Java 使用ResultSet从Oracle数据库读取VARCHAR2
最近开始使用带有Java和ResultSet的Oracle数据库,我要查询的表具有以下列结构: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(){ /
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?在这里显示更多的代码可能很有用。当为您的问题提供更多信息时,不要将其添加到注释中,而是将其编辑到问题本身中。