Java - error en IReport

 
Vista:
Imágen de perfil de alvaro alcocer

error en IReport

Publicado por alvaro alcocer (5 intervenciones) el 09/08/2010 18:53:17
Hola, soy nuevo en IReport 3.7.1, me salta un error al correr un JRBean, me salta un error de Error filling print... Error retrieving field value from bean : visto_vuelta...

Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -2      at java.lang.String.substring(String.java:1937)      at saad.JRBeanDatosSocioEconomicos.getVisto_vuelta(JRBeanDatosSocioEconomicos.java:209) 

El código es:

public class JRBeanDatosSocioEconomicos extends IJRBean{

private int id_cuso;
private java.util.Date fecha_ejecucion;
private String cod_usuario;
private String visto_num_exp;
private String visto_nombre;
private String visto_apellido1;
private String visto_apellido2;
private String visto_fecha_nacimiento;
private String visto_nacionalidad;
private String visto_num_id;
private String visto_vuelta;
private String vista;

public String getCod_usuario() {
return cod_usuario;
}
public void setCod_usuario(String cod_usuario) {
this.cod_usuario = cod_usuario;
}

public java.util.Date getFecha_ejecucion() {
return fecha_ejecucion;
}
public void setFecha_ejecucion(java.util.Date fecha_ejecucion) {
this.fecha_ejecucion = fecha_ejecucion;
}
public int getId_cuso() {
return id_cuso;
}
public void setId_cuso(int id_cuso) {
this.id_cuso = id_cuso;
}
public List getList(){
return JRBeanDatosSocioEconomicos.createBeanCollection();
}
public static List createBeanCollection(){
DbConnectionBroker pool =null;
List alData=new ArrayList();
try{
pool = IJRBean.getPool();
}catch (Exception e){
System.err.println(""+e);
e.printStackTrace();
}
Connection conn=pool.getConnection();
ResultSet rs = null;
PreparedStatement pstmt=null;
String query="select TAUD_CUSO_AUDITADAS.ID_AUD,TAUD_CUSO.ID_CUSO,TAUD_CUSO_AUDITADAS.FECHA_EJECUCION," +
"TAUD_CUSO_AUDITADAS.COD_USUARIO,TAUD_ENTIDAD.DESCRIPCION as ENTIDAD," +
"TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD as ID_DATO_ENTIDAD," +
"TAUD_DATO_ENTIDAD.DESCRIPCION as DATO,tvisualizado.VALOR_DATO as VALOR_DATO" +
" from TAUD_CUSO_AUDITADAS,tvisualizado,TAUD_DATO_ENTIDAD," +
"TAUD_ENTIDAD,TAUD_CUSO where TAUD_CUSO_AUDITADAS.ID_AUD=tvisualizado.ID_AUD" +
" and TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD=tvisualizado.ID_DATO_ENTIDAD" +
" and TAUD_ENTIDAD.ID_ENTIDAD= TAUD_DATO_ENTIDAD.ID_ENTIDAD and TAUD_CUSO.ID_CUSO=TAUD_CUSO_AUDITADAS.ID_CUSO" +
" and ((TAUD_CUSO.ID_CUSO=5) or (TAUD_CUSO.ID_CUSO=6) or (TAUD_CUSO.ID_CUSO=7)) " +
"order by TAUD_CUSO_AUDITADAS.ID_AUD";
//"order by TAUD_ENTIDAD.ID_ENTIDAD desc,TAUD_DATO_ENTIDAD.ID_DATO_ENTIDAD,TAUD_CUSO_AUDITADAS.ID_AUD desc";
try{
pstmt = conn.prepareStatement(query.toString());
//pstmt.setLong(1,this.uniqueId);
rs = pstmt.executeQuery();
JRBeanDatosSocioEconomicos datosSocioEconomicos=null;
int old_idCuso=-1;
while (rs.next()){
int id_Aud=rs.getInt("ID_AUD");
if (id_Aud!=old_idCuso){
if (datosSocioEconomicos!=null) alData.add(datosSocioEconomicos);
datosSocioEconomicos=new JRBeanDatosSocioEconomicos();
old_idCuso=id_Aud;
}
datosSocioEconomicos.setId_cuso(id_Aud);
datosSocioEconomicos.setCod_usuario(rs.getString("COD_USUARIO"));

String oracle_Date=rs.getString("FECHA_EJECUCION");
SimpleDateFormat sdf= new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
java.util.Date d=sdf.parse(oracle_Date);
datosSocioEconomicos.setFecha_ejecucion(d);

int id_dato_entidad=rs.getInt("ID_DATO_ENTIDAD");
switch (id_dato_entidad){
case 0:{
datosSocioEconomicos.setVisto_vuelta(rs.getString("VALOR_DATO"));
break;
}
case 2:{
datosSocioEconomicos.setVisto_nombre(rs.getString("VALOR_DATO"));
break;
}
case 3:{
datosSocioEconomicos.setVisto_apellido1(rs.getString("VALOR_DATO"));
break;
}
case 4:{
datosSocioEconomicos.setVisto_num_exp(rs.getString("VALOR_DATO"));
break;
}
case 6:{
datosSocioEconomicos.setVista(rs.getString("VALOR_DATO"));
break;
}
case 8:{
datosSocioEconomicos.setVisto_apellido2(rs.getString("VALOR_DATO"));
break;
}
case 9:{
datosSocioEconomicos.setVisto_fecha_nacimiento(rs.getString("VALOR_DATO"));
break;
}
case 10:{
datosSocioEconomicos.setVisto_nacionalidad(rs.getString("VALOR_DATO"));
break;
}
case 11:{
datosSocioEconomicos.setVisto_num_id(rs.getString("VALOR_DATO"));
break;
}
}//switch

}//while
if (datosSocioEconomicos!=null) alData.add(datosSocioEconomicos);

}catch (Exception e){
System.err.println("JRDiagnosticos::JRDiagnosticos() "+e);
e.printStackTrace();
} finally {
try{
rs.close();
}catch (Exception e){
System.err.println("JRDiagnosticos::JRDiagnosticos() "+e);
}
if (pstmt != null) {
try {pstmt.close();} catch (SQLException e) {System.err.println("HOLAS"+e);}
}
try{
pool.freeConnection(conn);
}catch (Exception e){
System.err.println("JRDiagnosticos::JRDiagnosticos() "+e);
}
}
pool.destroy();
return alData;
}
public String getVisto_apellido1() {
return visto_apellido1;
}
public void setVisto_apellido1(String visto_apellido1) {
this.visto_apellido1 = visto_apellido1;
}
public String getVisto_apellido2() {
return visto_apellido2;
}
public void setVisto_apellido2(String visto_apellido2) {
this.visto_apellido2 = visto_apellido2;
}
public String getVisto_fecha_nacimiento() {
return visto_fecha_nacimiento;
}
public void setVisto_fecha_nacimiento(String visto_fecha_nacimiento) {
this.visto_fecha_nacimiento = visto_fecha_nacimiento;
}
public String getVisto_nacionalidad() {
return visto_nacionalidad;
}
public void setVisto_nacionalidad(String visto_nacionalidad) {
this.visto_nacionalidad = visto_nacionalidad;
}
public String getVisto_nombre() {
return visto_nombre;
}
public void setVisto_nombre(String visto_nombre) {
this.visto_nombre = visto_nombre;
}
public String getVisto_num_exp() {
return visto_num_exp;
}
public void setVisto_num_exp(String visto_num_exp) {
this.visto_num_exp = visto_num_exp;
}
public String getVisto_num_id() {
return visto_num_id;
}
public void setVisto_num_id(String visto_num_id) {
this.visto_num_id = visto_num_id;
}
public String getVisto_vuelta() {
if (this.visto_vuelta==null) return null;

System.out.println("!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!" + this.visto_vuelta);
String[] pares=this.visto_vuelta.split(";");
Arrays.sort(pares);
ArrayList al=new ArrayList();
LinkedHashMap hm=null;
int old_id=-1;
int primero_visto=0;
for (int k=0;k<pares.length;k++){
String[] par=pares[k].split("=");
int id1=Integer.parseInt(par[0].substring(1,par[0].indexOf('_')));
int id2=Integer.parseInt(par[0].substring(par[0].indexOf('_')+1));
String par1=((par.length==2)?par[1]:"");

if ((id2==1)&&(par1.indexOf("SAAD")!=-1)){
//descartado
primero_visto=id1+1;
}

}
///creo tabla
for (int k=0;k<pares.length;k++){
String[] par=pares[k].split("=");
//aquí me da el error
int id1=Integer.parseInt(par[0].substring(1,par[0].indexOf('_')));
//
int id2=Integer.parseInt(par[0].substring(par[0].indexOf('_')+1));
String par1=((par.length==2)?par[1]:"");
if (id1<primero_visto) continue;//descartados
if (old_id!=id1){
old_id=id1;
if (hm!=null) al.add(hm);
hm=new LinkedHashMap();
}
switch (id2){
case 0:{
hm.put("Año", par1);
break;
}
case 1:{
hm.put("Tipo Renta", par1);
break;
}
case 2:{
hm.put("Concepto/Tipo de actividad", par1);
break;
}
case 3:{
hm.put("Cuantía anual/Rendimientos anuales", par1);
break;
}
case 4:{
hm.put("Comentarios", par1);
break;
}
}
}
if (hm!=null)al.add(hm);
FormatViewData fv=new FormatViewData();
return fv.formateaTabla(al);
}
public void setVisto_vuelta(String visto_vuelta) {
this.visto_vuelta = visto_vuelta;
System.out.println("AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA" + this.visto_vuelta);
}
public String getVista() {
return vista;
}
public void setVista(String vista) {
this.vista = vista;
}
}

Esto debe ser porque en el método getVisto_vuelta() no te devuelve nada el String visto_vuelta, a cambio en el método setVisto_vuelta si que te devuelve valor, lo que me parece muy extraño. ¿Alguien me puede echar una mano?. Gracias de antemano
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:error en IReport

Publicado por mario (622 intervenciones) el 09/08/2010 21:37:26
claro q t imprime valor ya q es el valor q le pasas en el otro no entiendo bien la logica de tu programa
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de alvaro alcocer

RE:error en IReport

Publicado por alvaro alcocer (5 intervenciones) el 09/08/2010 22:23:15
Hola Mario,
La lógica es que al tener un select de datos de una tabla, un ejemplo de visto_vuelta que se coge del campo VALOR_DATO de la tabla tvisualizado sería:

'R9_6=GONZALEZ;R4_1=Resolución;R8_8=N;R8_25=1-6JHOA; R4_6=ALEXANDRA;R5_10=N; etc

En el programa se corta con un split los pares separados por ";" luego se corta por "=" hasta obtener los indices que para R4_1=Resolución sería id1=4 e id2=1, que representaría a la fila 4 y columna 1 que según el id2 se haga una tabla de equivalencia o switch para que se imprima R4_TipodeRenta= Resolución

Lo que me extraña es que antes (o después, no lo sé) que se llegue a cortar el String el método getVisto_vuelta pierde el valor de visto_vuelta por lo que para el String[] pares=this.visto_vuelta.split(";");

for (int k=0;k<pares.length;k++){
String[] par=pares[k].split("=");

salga el error en int id1=Integer.parseInt(par[0].substring(1,par[0].indexOf('_')));

Caused by: java.lang.StringIndexOutOfBoundsException: String index out of range: -2 

ya que pares es null

Espero haberme aclarado
Muchas gracias
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar