2012-05-25 92 views
18

我正在讀取文本文件中的整數,將它們作爲查詢的輸入並獲取查詢輸出並寫入xls文件。無效行號(65536)超出允許範圍(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()); 
} 

我收到錯誤Invalid row number (65536) outside allowable range (0..65535)

contacts.txt文件有大約36000號。

+0

你已經給了我們很多的代碼 - 請出示其確切的行拋出異常。 (打印異常堆棧跟蹤找出它 - 不僅僅是消息...) –

+0

錯誤發生在哪裏? –

+0

我沒有調試code.problem是當我在給contacts.txt文件中的少數字我沒有得到這個錯誤。當我在contacts.txt文件中運行36000個數字時,它給出了無效的行數錯誤 – Cindrella

回答

30

HSSF針對僅支持最多65536行的Excel版本(Excel 2003)。

您可以嘗試使用較新的XSSF API,它支持更高版本的Excel,它具有更大的行限制。

有一個conversion guide這將幫助您在兩個API之間進行轉換。

+0

我沒有太多時間...可以üPLZ給我的例子寫入使用XSSF API的Excel文件 – Cindrella

+0

是的,我正在創建新的行對於每個聯繫人 – Cindrella

+8

@Mohini - 是什麼讓你認爲其他人有更多的時間來幫助你,免費?如果你不準備付出努力,看起來你的態度非常不尊重。 –

0

Excel(也許只有較早的版本)只允許65535行。

這裏是一個link Excel 2003的限制,這確實是65535行。 2010年增加到1,048,576

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

我只是猜測,但事實並非如此,該指數++是在WHILE因爲它爲每一個每次創建一個新的行進入記錄集?

0
int person_org_id, external_person_org_id; 

你需要改變int變量成爲整數,還有從原始的限制,不能超過-3276732767

+0

數據類型的'hort'具有該範圍,而不是int:默認情況下,int數據類型是32位有符號的二進制補碼整數,其最小值爲-2^31,最大值爲2^31-1。在Java SE 8和更高版本中,可以使用int數據類型來表示一個無符號的32位整數,它的最小值爲0,最大值爲2^32-1。使用Integer類將int數據類型用作無符號整數 – AtliB

相關問題