web-dev-qa-db-fra.com

Numéro de ligne non valide (65 536) en dehors de la plage autorisée (0..65535)

Je suis en train de lire les entiers d'un fichier texte, de les entrer comme entrée dans une requête et d'obtenir le résultat de la requête et l'écriture dans un fichier xls.

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());
}

Je reçois une erreur Invalid row number (65536) outside allowable range (0..65535) 

Mon fichier contacts.txt contient environ 36 000 numéros.

22
Cindrella

HSSF cible une version d'Excel (Excel 2003) qui ne prend en charge qu'un maximum de 65 536 lignes.

Vous pouvez essayer d’utiliser plutôt la plus récente XSSF API, qui prend en charge les versions ultérieures d’Excel comportant un nombre de lignes plus important.

Il existe un guide de conversion qui vous aidera à effectuer la conversion entre les deux API.

35
Simon Nickerson

Si vous ne disposez que de 36 000 éléments dans le fichier texte, un autre élément doit être faux.

Créez un petit échantillon, par exemple de 100 entrées, et testez-le.

Examinez attentivement le fichier Excel obtenu, si vous le pouvez. Il semble que le problème suivant soit votre problème:

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++;
        }       

Je ne fais que deviner, mais le fait que l'index ++ se trouve dans WHILE provoque-t-il la création d'une nouvelle ligne à chaque fois pour CHAQUE entrée d'un jeu d'enregistrements? 

2
Ewald

Excel (peut-être uniquement les anciennes versions) n'autorise que 65535 lignes.

Voici un lien - vers les limites d'Excel 2003, soit 65535 lignes. Il a été augmenté pour 2010 à 1 048 576

0
brain
int person_org_id, external_person_org_id;

vous devez changer la variable int en Integer, il existe une limite de primitive et ne peut pas dépasser -32767 en 32767

0
Zechreich