web-dev-qa-db-ja.com

許容範囲外の無効な行番号(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の数字があります。

26
Cindrella

HSSFは、最大65536行のみをサポートするExcel(Excel 2003)のバージョンを対象としています。

代わりに新しい [〜#〜] xssf [〜#〜] APIを使用してみてください。このAPIは、より寛大な行制限を持つExcelの新しいバージョンをサポートします。

変換ガイド があり、2つのAPI間の変換に役立ちます。

39
Simon Nickerson

テキストファイルに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++;
        }       

私は推測していますが、index ++がWHILEにあるという事実により、レコードセットのすべてのエントリに対して毎回新しい行が作成されますか?

2
Ewald

Excel(おそらく古いバージョンのみ)では65535行しか使用できません。

これは link Excel 2003の制限です。実際には65535行です。 2010年には 1,048,576 に増加しました。

0
brain
int person_org_id, external_person_org_id;

int変数をIntegerに変更する必要があります。プリミティブからの制限があり、-32767から32767

0
Zechreich