2012-05-25 14 views
18

Czytam liczby całkowite z pliku tekstowego, podając je jako dane wejściowe do zapytania i pobierając wynik zapytania i zapisując do pliku xls.Nieprawidłowy numer wiersza (65536) poza zakresem (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()); 
} 

jestem coraz error Invalid row number (65536) outside allowable range (0..65535)

mój plik contacts.txt ma około 36000 numerów.

+0

Dałeś nam dużo kodu - proszę pokazać których dokładna linia zgłasza wyjątek. (Wydrukuj ślad stosu wyjątku, aby go znaleźć - nie tylko komunikat ...) –

+0

Gdzie pojawia się błąd? –

+0

i nie debugowania code.problem jest, gdy daje mniej numerów w pliku contacts.txt nie otrzymuję tego błędu. gdy używam 36000 numerów w pliku contacts.txt, podając nieprawidłowy numer wiersza – Cindrella

Odpowiedz

30

HSSF jest przeznaczony dla wersji programu Excel (Excel 2003), która obsługuje maksymalnie 65536 wierszy.

Możesz spróbować użyć nowszego interfejsu API XSSF, który obsługuje nowsze wersje programu Excel, które mają bardziej hojny limit wierszy.

Istnieje conversion guide, który pomoże Ci przekonwertować między dwoma interfejsami API.

+0

i nie mam dużo czasu ... czy możesz dać mi przykład, aby napisać do pliku Excela używając XSSF API – Cindrella

+0

Tak, tworzę nowy wiersz dla każdego kontaktu – Cindrella

+8

@Mohini - co sprawia, że ​​myślisz, że inni ludzie mają więcej czasu, aby Ci pomóc, za darmo? Wygląda na to, że masz lekceważące nastawienie, jeśli nie jesteś przygotowany do samodzielnego wysiłku. –

0

Excel (być może tylko starsze wersje) pozwala tylko na 65535 wierszy.

Oto link do limitów programu Excel 2003, czyli w rzeczywistości 65535 wierszy. Został zwiększony na rok 2010 do 1,048,576.

2

Jeśli w pliku tekstowym znajduje się tylko 36000 pozycji, coś innego musi być nie tak.

Utwórz małą próbkę, powiedzmy 100 pozycji i przetestuj ją.

Uważnie przejrzyj wynikowy plik Excel, jeśli możesz. Wygląda to tak, jakby po kawałek kodu jest Twój problem:

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

Ja tylko zgadywać, ale nie fakt, że indeks ++ jest czas, bo to, aby stworzyć nowy wiersz za każdym razem dla każdego wpis w zestawie rekordów?

0
int person_org_id, external_person_org_id; 

trzeba zmienić int zmienna stać Integer, istnieje granica z prymitywny i nie więcej niż -32767 do 32767

+0

Typ danych "ma" zakres, nie int: Domyślnie typ danych int to 32 -bitowana liczba całkowita z dopełnieniem liczby dwójkowej, która ma minimalną wartość -2^31 i maksymalną wartość 2^31-1. W języku Java SE 8 i nowszych wersjach można użyć typu danych int do przedstawienia 32-bitowej liczby całkowitej bez znaku, która ma wartość minimalną 0 i wartość maksymalną 2^32-1. Użyj klasy Integer, aby użyć typu danych int jako liczby całkowitej bez znaku – AtliB

Powiązane problemy