2012-05-25 20 views
18

Estoy leyendo números enteros de un archivo de texto, dándolos como entrada a una consulta y obteniendo la salida de la consulta y escribiendo en un archivo xls.Número de fila inválida (65536) fuera del rango permitido (0..65535)

ResultSet rs; 
Connection con = null; 
PreparedStatement ps = null; 
int person_org_id, external_person_org_id; 
File f = null; 
Scanner scan = null; 

try { 
    System.out.println("----------checkpoint-----------"); 
    Class.forName("oracle.jdbc.driver.OracleDriver"); 
    System.out.println("----------checkpoint 1-----------"); 
    con = DriverManager.getConnection("jdbc:oracle:thin:@ksdjf.kjdlk.jkd.com:2222:edb", "aaaaa", "aaaa"); 
    System.out.println("----------checkpoint 2 ----------"); 
    if (con == null) { 
     System.out.println("unable to connect to database"); 
    } 
    System.out.println("----------checkpoint 3::connected to database---------"); 
    StringBuffer sql = new StringBuffer(); 
    sql.append("select abd from edb.abd where customer_id=510 and person_org_id =? "); 
    ps = con.prepareStatement(sql.toString()); 

    HSSFWorkbook wb = new HSSFWorkbook(); 
    HSSFSheet sheet = wb.createSheet("Excel Sheet"); 
    HSSFRow rowhead = sheet.createRow(0); 
    rowhead.createCell(0).setCellValue("ABC"); 
    rowhead.createCell(1).setCellValue("DEF"); 

    f = new File("/tmp/contacts.txt"); 
    scan = new Scanner(f); 
    int index=1; 

    while (scan.hasNextInt()) { 

     person_org_id = scan.nextInt(); 

     ps.setInt(1,person_org_id); 
     rs= ps.executeQuery(); 

     while (rs.next()) {     

      external_person_org_id = rs.getInt(1); 

      HSSFRow row = sheet.createRow(index); 
      row.createCell(0).setCellValue(person_org_id); 
      row.createCell(1).setCellValue(external_person_org_id); 
      index++; 
     }   

    } 
    FileOutputStream fileOut = new FileOutputStream(new File("/tmp/External_contact_id.xls")); 
    wb.write(fileOut); 
    fileOut.close(); 
    System.out.println("--------checkpoint 4:: writing data to xls completed------------"); 
} 
catch (Exception e) { 
    System.out.println(e.getMessage()); 
} 

estoy error al obtener Invalid row number (65536) outside allowable range (0..65535)

Mi archivo contacts.txt tiene alrededor de 36000 números.

+0

que nos ha proporcionado una gran cantidad de código - por favor mostrar qué línea exacta produce la excepción. (Imprima el seguimiento de la pila de excepciones para descubrirlo, no solo el mensaje ...) –

+0

¿Dónde se produce el error? –

+0

No depuré el código. El problema es cuando estoy dando menos números en el archivo contacts.txt. No recibo este error. cuando estoy ejecutando con 36000 números en el archivo contacts.txt que da el error número de fila no válida – Cindrella

Respuesta

30

HSSF se dirige a una versión de Excel (Excel 2003) que solo admite un máximo de 65536 filas.

En su lugar, podría intentar usar la nueva API XSSF, que admite versiones posteriores de Excel que tienen un límite de fila más generoso.

Hay un conversion guide que le ayudará a convertir entre las dos API.

+0

no tengo mucho tiempo ... ¿puede por favor darme el ejemplo para escribir en archivos de Excel usando XSSF API – Cindrella

+0

sí, estoy creando una nueva fila para cada contacto – Cindrella

+8

@Mohini: ¿qué te hace pensar que otras personas tienen más tiempo para ayudarte de forma gratuita? Parece que tienes una actitud muy irrespetuosa si no estás preparado para esforzarte. –

0

Excel (quizás solo versiones anteriores) solo permite 65535 filas.

Aquí hay un link a los límites de Excel 2003, que es de hecho 65535 filas. Aumentó para 2010 a 1,048,576.

2

Si solo tiene 36000 elementos en el archivo de texto, algo más debe estar mal.

Crea una pequeña muestra, digamos, 100 entradas, y prueba con eso.

Observe detenidamente el archivo de Excel resultante, si puede. Parece como si el siguiente fragmento de código es su problema:

while(rs.next()){     

     external_person_org_id = rs.getInt(1); 

     HSSFRow row = sheet.createRow(index); 
      row.createCell(0).setCellValue(person_org_id); 
      row.createCell(1).setCellValue(external_person_org_id); 
      index++; 
     }  

Sólo estoy adivinando, pero no el hecho de que el índice ++ está en el MIENTRAS causa para crear una nueva fila cada hora por cada entrada en un conjunto de registros?

0
int person_org_id, external_person_org_id; 

necesita cambiar la variable int convertirse entero, hay límite a partir del primitivo y pueden no más de -32767 a 32767

+0

Tipo de datos'short' tiene ese rango, no int: Por defecto, el tipo de datos int es un 32 -bit firmó complemento de dos entero, que tiene un valor mínimo de -2^31 y un valor máximo de 2^31-1. En Java SE 8 y posteriores, puede usar el tipo de datos int para representar un entero de 32 bits sin signo, que tiene un valor mínimo de 0 y un valor máximo de 2^32-1. Use la clase Integer para usar el tipo de datos int como un entero sin signo – AtliB

Cuestiones relacionadas