【发布时间】: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 中,将其编辑到问题本身中。