Подтвердить что ты не робот

Недопустимый номер строки (65536) вне допустимого диапазона (0..65535)

Я читаю целые числа из текстового файла, предоставляя их в качестве входных данных для запроса и получая вывод и запись запроса в файл 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());
}

Я получаю ошибку Invalid row number (65536) outside allowable range (0..65535)

В моем файле contacts.txt содержится около 36000 номеров.

4b9b3361

Ответ 1

HSSF предназначен для версии Excel (Excel 2003), которая поддерживает только 65536 строк.

Вместо этого вы можете попробовать использовать более новый XSSF API, который поддерживает более поздние версии Excel, которые имеют более щедрый предел строк.

Существует руководство по конверсии, которое поможет вам конвертировать между двумя API.

Ответ 2

Если у вас есть только 36000 элементов в текстовом файле, что-то еще должно быть неправильным.

Создайте небольшой образец, скажем, 100 записей и протестируйте его.

Присмотритесь к полученному файлу Excel, если сможете. Кажется, что следующая часть кода - это ваша проблема:

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

Я просто догадываюсь, но не факт, что индекc++ находится в WHILE, потому что он каждый раз создает новую строку для КАЖДОЙ записи в наборе записей?

Ответ 3

Excel (возможно, только более старые версии) допускают только 65535 строк.

Здесь ссылка в листы Excel 2003, которая действительно составляет 65535 строк. Это увеличилось за 2010 год до 1 048 576.

Ответ 4

int person_org_id, external_person_org_id;

вам нужно, чтобы переменная int стала целочисленной, существует ограничение от примитива и не может быть больше -32767 до 32767