2012-05-25 9 views
18

Ich lese Integer aus einer Textdatei, gebe sie als Eingabe für eine Abfrage und bekomme die Abfrageausgabe und schreibe in eine xls-Datei.Ungültige Zeilennummer (65536) außerhalb des zulässigen Bereichs (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()); 
} 

ich Störung erhalte Invalid row number (65536) outside allowable range (0..65535)

Meine contacts.txt Datei hat rund 36000 Zahlen.

+0

Sie haben uns eine Menge Code gegeben - zeigen, welche genau die Ausnahme genaue Linie wirft. (Drucken Sie den Trace des Ausnahmestapels, um es herauszufinden - nicht nur die Nachricht ...) –

+0

Wo tritt der Fehler auf? –

+0

ich debuggte nicht das code.problem ist, wenn ich weniger Zahlen in der contacts.txt Datei gebe, bekomme ich diesen Fehler nicht. Wenn ich mit 36000 Nummern in der contacts.txt-Datei laufe, gebe ich den ungültigen Zeilennummernfehler ein – Cindrella

Antwort

30

HSSF zielt auf eine Version von Excel (Excel 2003), die nur maximal 65536 Zeilen unterstützt.

Sie könnten stattdessen versuchen, die neuere API XSSF zu verwenden, die spätere Versionen von Excel unterstützt, die eine großzügigere Zeilenbegrenzung haben.

Es gibt eine conversion guide, mit der Sie zwischen den beiden APIs konvertieren können.

+0

ich habe nicht viel Zeit ... können Sie mir das Beispiel geben, um Excel-Datei mit XSSF API schreiben – Cindrella

+0

ja ich erstelle neue Zeile für jeden Kontakt – Cindrella

+8

@Mohini - was lässt Sie denken, dass andere Menschen mehr Zeit haben, Ihnen kostenlos zu helfen? Es scheint, dass Sie eine sehr respektlose Einstellung haben, wenn Sie nicht bereit sind, sich selbst zu bemühen. –

0

Excel (vielleicht nur ältere Versionen) erlauben nur 65535 Zeilen.

Hier ist ein link zu den Excel 2003 Grenzen, die in der Tat 65535 Zeilen ist. Es wurde für 2010 auf 1,048,576 erhöht.

2

Wenn Sie nur 36000 Elemente in der Textdatei haben, muss etwas anderes falsch sein.

Erstellen Sie eine kleine Stichprobe von beispielsweise 100 Einträgen und testen Sie diese.

Werfen Sie einen Blick auf die resultierende Excel-Datei, wenn Sie können. Es sieht aus, als ob das folgende Stück Code Ihr Problem ist:

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

ich nur raten, aber nicht die Tatsache, dass der Index ++ in der WHILE ist weil es eine neue Zeile jedes Mal für jeden zu schaffen Eintrag in einem Datensatz?

0
int person_org_id, external_person_org_id; 

Sie müssen int Variable Integer werden ändern, gibt es Limit von primitiven und kann nicht mehr als -32767 zu 32767

+0

Datentyp short hat diesen Bereich, nicht int: Standardmäßig ist der Int-Datentyp eine 32 -bit Vorzeichen von Zweierkomplement-Ganzzahl, die einen minimalen Wert von -2^31 und einen maximalen Wert von 2^31-1 hat. In Java SE 8 und höher können Sie den int-Datentyp verwenden, um eine vorzeichenlose 32-Bit-Ganzzahl darzustellen, die einen minimalen Wert von 0 und einen maximalen Wert von 2^32-1 hat. Verwenden Sie die Integer-Klasse, um den int-Datentyp als vorzeichenlose Ganzzahl zu verwenden – AtliB

Verwandte Themen