2012-01-20 11 views
5

जिस वेब एप्लिकेशन में मैं वर्तमान में विकास कर रहा हूं वह सीएसवी निर्यात का समर्थन करता है (आउटलेट में चयन का उपयोग करके) और आयात (लोड डेटा इन्फाइल का उपयोग करके) MySQL सर्वर विशाल डेटा सेट को बनाए रखने के लिए जावा कोड (प्रसंस्करण परिणाम सेट, स्ट्रिंग एन्कोडिंग सामान, व्यवसाय तर्क विरासत इत्यादि) में चयन और थोक INSERT कथन का उपयोग करके संसाधित होने के लिए बेहद महंगा है। ये सीएसवी फाइलें एप्लिकेशन संचालित नहीं हैं, इसलिए वे MySQL डेटाबेस से कच्चे टेबल सामग्री का प्रतिनिधित्व करते हैं। लेकिन जहां तक ​​मैं समझता हूं कि यह दृष्टिकोण केवल तभी अच्छा है जब मेरे पास स्थानीय फाइलें हों, इसलिए वेब अनुप्रयोग सर्वर और mysqld दोनों को एक ही मशीन पर चलाना चाहिए।जेडीबीसी: धाराओं का उपयोग कर रिमोट MySQL डेटाबेस से सीएसवी कच्चे डेटा निर्यात/आयात (आउटपुट/लोड डेटा इन्फाइल में चयन करें)

एप्लिकेशन कॉन्फ़िगरेशन दूरस्थ डेटाबेस कनेक्शन निर्दिष्ट कर सकता है। इसका स्पष्ट अर्थ यह है कि अपलोड की गई सीएसवी फाइलें उस मशीन पर स्थानीय रूप से कहीं भी संग्रहीत की जाती हैं जहां वेब एप्लिकेशन चल रहा है, इसलिए मैं MySQL LOAD डेटा INFILE कथन में डेटा फ़ाइल स्थान निर्दिष्ट नहीं कर सकता। (एक ही परिदृश्य एक सीएसवी डाउनलोड अनुरोध के लिए है)। तो, जो मैं खोजने की कोशिश कर रहा हूं वह सीएसवी फ़ाइल "वस्तुतः" निर्दिष्ट करने का एक तरीका है - एक आई/ओ स्ट्रीम का उपयोग करके जिसे जेडीबीसी और माईएसक्यूएल द्वारा संसाधित किया जा सकता है, जैसे ब्लॉब्स प्रबंधन आदि।

क्या जेडीबीसी/MySQL आयात और निर्यात के लिए सीएसवी फाइलों के लिए इस तकनीक का समर्थन करें?

अग्रिम धन्यवाद।

उत्तर

4

आप स्थानीय विकल्प का उपयोग कर लोड डेटा इन्फाइल चला सकते हैं जो तब CSV फ़ाइल लोड करेगा जहां से MySQL जेडीबीसी क्लाइंट com.mysql.jdbc.Statement#setLocalInfileInputStream का उपयोग कर चल रहा है। उदाहरण के लिए:

// conn is an existing java.sql.Connection to a remote server 
try (Statement st = conn.createStatement()) { 
    String localCsvFileSpec = "C:/Users/Jamie/Desktop/foo.csv"; // on this machine 
    ((com.mysql.jdbc.Statement) st).setLocalInfileInputStream(
      new FileInputStream(localCsvFileSpec)); 
    st.execute(
      "LOAD DATA LOCAL INFILE '(placeholder)' " + 
      "INTO TABLE table01 " + 
      "COLUMNS TERMINATED BY ',' " + 
      "(id, txt) " + 
      ""); 
} 

अधिक जानकारी के लिए this post देखें।

दुर्भाग्यवश, ऐसा लगता है कि आप this answer on Stack Overflow से अपने डेटाबेस सर्वर के अलावा कहीं भी फ़ाइलों को निर्यात करने के लिए आउटपुट में उपयोग का उपयोग नहीं कर सकते हैं।

+0

यह उत्तर मेरा दिन बचाओ! –

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