2014-07-24 2 views
12

मैं jdbc का उपयोग कर एक फ्लैट फ़ाइल में एक पूर्ण तालिका कैसे लिखूं? अब तक मैंने निम्नलिखित का प्रयास किया है:jdbc में ResultSet.getBinaryStream() का उपयोग करके आप सभी कॉलम से मूल्य कैसे प्राप्त करते हैं?

Statement statement = connection.createStatement(); 
    ResultSet result = statement.executeQuery("SELECT * FROM tablename"); 
    BufferedInputStream buffer; 
    FileOutputStream out = new FileOutputStream("flatfile.txt"); 
    while(result.next()) 
    { 
     buffer = new BufferedInputStream(result.getBinaryStream("????")); 
     byte[] buf = new byte[4 * 1024]; //4K buffer 
     int len; 
     while((len = buffer.read(buf, 0, buf.length)) != -1) 
     { 
      out.write(buf, 0, len); 
     } 
    } 
    out.close(); 

"????" बस मेरा प्लेसहोल्डर है। मैं एक तर्क के रूप में क्या गुजरना है पर अटक गया हूँ।

+0

आपका प्रश्न क्या है की तरह है? –

+0

क्या मैं बस '????' को प्रतिस्थापित करता हूं सभी कॉलम प्राप्त करने के लिए या "" पूरी पंक्ति प्राप्त करने के लिए परिणामसेट या किसी अन्य वर्ग के भीतर कोई और फ़ंक्शन है? मैं बस पूरी पंक्ति चाहता हूँ। उस रिकॉर्ड के सिर्फ एक कॉलम नहीं। मेरे पास अभी तक परीक्षण करने के लिए डीबी कनेक्टिविटी नहीं है इसलिए मैं इसे पहले से ही समझने की कोशिश कर रहा हूं इसलिए मैं तैयार हूं। – HarishV

+2

'परिणामसेट' पूरी पंक्ति से निपटने वाली विधियां प्रदान नहीं करता है। आपको व्यक्तिगत रूप से कॉलम से निपटने की ज़रूरत है। आपको [getMetaData()] (http://docs.oracle.com/javase/8/docs/api/java/sql/ResultSet.html#getMetaData--) विधि उपयोगी हो सकती है। – GriffeyDog

उत्तर

20

ResultSetMetaData उपयोग करने के लिए आप सभी कॉलम नामों और नीचे दिए गए कोड का उपयोग कर अपनी मेज से पूरी जानकारी प्राप्त कर सकते की जरूरत है। writeToFile विधि दायर करने के लिए (यदि वह पर्याप्त स्पष्ट नहीं था :))

ResultSetMetaData metadata = rs.getMetaData(); 
    int columnCount = metadata.getColumnCount();  
    for (int i = 1; i <= columnCount; i++) { 
     writeToFile(metadata.getColumnName(i) + ", ");  
    } 
    System.out.println(); 
    while (rs.next()) { 
     String row = ""; 
     for (int i = 1; i <= columnCount; i++) { 
      row += rs.getString(i) + ", ";   
     } 
     System.out.println(); 
     writeToFile(row); 

    } 
+1

आह, बहुत बुरा कोई परिणाम नहीं है .getRow विधि! –

1

result.getBinaryStream("????") केवल उस कॉलम के मान के लिए वापस लौटाएगा जैसा आपने प्लेसहोल्डर के रूप में रखा था।

आप सभी स्तंभ प्राप्त करना चाहते हैं, तो आप से ResultSet

ResultSetMetaData metadata = resultSet.getMetaData(); 
    int columnCount = metadata.getColumnCount(); 
    for (int i=1; i<=columnCount; i++) 
    { 
     String columnName = metadata.getColumnName(i); 
     System.out.println(columnName); 
    } 
+0

आपको sendon1982 धन्यवाद, मुझे लगता है कि मैं getBinaryCount() का उपयोग कर तालिका में प्रत्येक कॉलम के माध्यम से लूप करने के लिए इसका उपयोग कर सकता हूं और पूरी तालिका को मुद्रित करने के लिए कॉलम इंडेक्स में बस पास कर सकता हूं। मैं सोच रहा था कि क्या एक पूरी फंक्शन को एक ही समारोह के साथ थूकने का कोई तरीका था, लेकिन यह होगा। – HarishV

+0

आपका स्वागत है। नहीं, आपको उन्हें एक-एक करके दिखाने के लिए लूप का उपयोग करना होगा। – sendon1982

1

यहाँ कैसे मैं एक JDBC कनेक्शन से एक मेज डंप, डिबगिंग के लिए बहुत उपयोगी है अगर आप सभी पंक्तियों को देखने के लिए चाहते हैं लिखने के लिए तर्क में शामिल होंगे उदाहरण के लिए डीबी: एक स्मृति में (HSQL पूर्व): में हैं कि

public static void spitOutAllTableRows(String tableName, Connection conn) { 
    try { 
     System.out.println("current " + tableName + " is:"); 
     try (PreparedStatement selectStmt = conn.prepareStatement(
       "SELECT * from " + tableName, ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY); 
      ResultSet rs = selectStmt.executeQuery()) { 
     if (!rs.isBeforeFirst()) { 
      System.out.println("no rows found"); 
     } 
     else { 
      while (rs.next()) { 
      for (int i = 1; i < rs.getMetaData().getColumnCount() + 1; i++) { 
       System.out.print(" " + rs.getMetaData().getColumnName(i) + "=" + rs.getObject(i)); 
      } 
      System.out.println(""); 
      } 
     } 
     } 
    } 
    catch (SQLException e) { 
     throw new RuntimeException(e); 
    } 
    } 

उत्पादन

current <yourtablename> is: 
ID=1 COLUMN1=abc COLUMN2=null 
ID=2 COLUMN1=def COLUMN2=ghi 
... 
संबंधित मुद्दे

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