2012-05-25 10 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 डीबग नहीं किया है जब मैं contact.txt फ़ाइल में कम संख्या दे रहा हूं मुझे यह त्रुटि नहीं मिल रही है। जब मैं contact.txt फ़ाइल में 36000 नंबरों के साथ चल रहा हूं तो यह अमान्य पंक्ति संख्या त्रुटि – Cindrella

उत्तर

30

एचएसएसएफ एक्सेल (एक्सेल 2003) का एक संस्करण लक्षित करता है जो केवल अधिकतम 65536 पंक्तियों का समर्थन करता है।

आप इसके बजाय नए XSSF एपीआई का उपयोग करने का प्रयास कर सकते हैं, जो Excel के बाद के संस्करणों का समर्थन करता है जिनमें अधिक उदार पंक्ति सीमा होती है।

एक conversion guide है जो आपको दो एपीआई के बीच परिवर्तित करने में मदद करेगा।

+0

में चाहता हूं, मेरे पास अधिक समय नहीं है ... क्या आप मुझे एक्सएसएसएफ एपीआई – Cindrella

+0

का उपयोग कर एक्सेल फ़ाइल लिखने का उदाहरण दे सकते हैं हाँ मैं नई पंक्ति बना रहा हूं प्रत्येक संपर्क के लिए – Cindrella

+8

@ मोहिनी - आपको क्या लगता है कि अन्य लोगों के पास आपकी मदद करने के लिए अधिक समय है, मुफ्त में? ऐसा लगता है कि यदि आप खुद को प्रयास करने के लिए तैयार नहीं हैं तो आपको बहुत अपमानजनक रवैया है। –

0

एक्सेल (शायद केवल पुराने संस्करण) केवल 65535 पंक्तियों की अनुमति देते हैं।

एक्सेल 2003 सीमाओं में link है, जो वास्तव में 65535 पंक्तियां है। यह 2010 से 1,048,576 के लिए बढ़ गया है।

2

यदि आपके पास टेक्स्ट फ़ाइल में केवल 36000 आइटम हैं, तो कुछ और गलत होना चाहिए।

चलो कहें, 100 प्रविष्टियां, और उसके साथ परीक्षण का एक छोटा सा नमूना बनाएं।

परिणामस्वरूप एक्सेल फ़ाइल पर सावधानीपूर्वक नजर डालें, यदि आप कर सकते हैं। ऐसा लगता है जैसे कोड का निम्न भाग तुम्हारी समस्या क्या है:

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

मैं सिर्फ अनुमान लगा रहा हूँ, लेकिन यह है कि सूचकांक ++ समय में है यह एक नई पंक्ति हर के लिए हर बार नहीं बनाएगा तथ्य कारण करने के लिए एक रिकॉर्ड सेट में प्रवेश?

0
int person_org_id, external_person_org_id; 

आप पूर्णांक चर पूर्णांक बन बदलने की जरूरत है, वहाँ आदिम से सीमा रहे हैं और अधिक नहीं -3276732767 को

+0

डेटा प्रकार की हॉर्ट की उस सीमा है, int नहीं: डिफ़ॉल्ट रूप से, int डेटा प्रकार 32 है -बिट ने दो पूरक पूरक पूर्णांक पर हस्ताक्षर किए, जिसका न्यूनतम मूल्य -2^31 है और अधिकतम मूल्य 2^31-1 है। जावा एसई 8 और बाद में, आप एक अनगिनत 32-बिट पूर्णांक का प्रतिनिधित्व करने के लिए int डेटा प्रकार का उपयोग कर सकते हैं, जिसमें न्यूनतम मान 0 और 2^32-1 का अधिकतम मान है। इंटिगर क्लास का उपयोग इंटरेस्ट पूर्णांक के रूप में int डेटा प्रकार का उपयोग करने के लिए करें – AtliB

संबंधित मुद्दे