दिलचस्प पोस्ट
सी # में निजी फ़ील्ड का मान कैसे प्राप्त करें? आईओएस 8: बंडल मार्ग परिवर्तन स्टार्टअप के बाद MVC6 का मार्ग संग्रह बदलें विचारों को स्विच करने के लिए मैं UISegmentedControl का उपयोग कैसे करूं? Xcode 5.1 में आर्म64 वास्तुकला क्या बाइनरी छवि डेटा को HTML मार्कअप में रखना संभव है और फिर किसी भी ब्राउज़र में छवि को सामान्य रूप में प्रदर्शित किया जा सकता है? HTML5 ब्राउज़र में एकल छवि अनुरोध को रद्द करें जावा अपने 16-बिट वर्ण प्रकार में UTF-16 अक्षरों को कैसे संग्रहीत करता है? एएसपी.Net पहचान डाटाबेस का पहला तरीका उपयोग करना ऑफस्क्रीन UITableViewCells (आकार गणना के लिए) आकार वर्ग का सम्मान नहीं? टाइमर के साथ Jquery / Ajax कॉल UITableViewCell क्लिक पर विस्तार जावा में छवि आइकन स्विच करें? Matplotlib में दो भूखंडों के बीच लाइनों को आकर्षित करना SQL सर्वर 2005 में एक बयान में दो तालिकाओं को अपडेट करने के लिए कैसे?

जेएसडीसी के साथ MySQL का इस्तेमाल करते हुए एक .sql स्क्रिप्ट चलाना

मैं जेडीबीसी के साथ MySQL का इस्तेमाल करना शुरू कर रहा हूं।

Class.forName("com.mysql.jdbc.Driver"); conn = DriverManager.getConnection("jdbc:mysql:///x", "x", "x"); stmt = conn.createStatement(); stmt.execute( "CREATE TABLE amigos" + "("+ "id int AUTO_INCREMENT not null,"+ "nombre char(20) not null,"+ "primary key(id)" + ")"); 

मेरे पास 3-4 टेबल बनाने के लिए है और यह अच्छा नहीं लगता है

MySQL JDBC से .ql स्क्रिप्ट चलाने का एक तरीका है?

Solutions Collecting From Web of "जेएसडीसी के साथ MySQL का इस्तेमाल करते हुए एक .sql स्क्रिप्ट चलाना"

ठीक। आप इस प्रोजेक्ट में यहां इस क्लास का इस्तेमाल कर सकते हैं (फाइल लंबाई के कारण पेस्टबिन पर पोस्ट) लेकिन अपाचे लाइसेंस जानकारी रखने के लिए याद रखें

जेडीबीसी लिपिरनर

आईबेटिस लिपि का रैपऑफ हटाए गए निर्भरता के साथ रननर।

आप इसे इस तरह उपयोग कर सकते हैं

 Connection con = .... ScriptRunner runner = new ScriptRunner(con, [booleanAutoCommit], [booleanStopOnerror]); runner.runScript(new BufferedReader(new FileReader("test.sql"))); 

बस!

मैंने इस पर बहुत कुछ किया और वसंत से एक अच्छा उपयोग पाया मुझे लगता है कि SimpleJdbcTestUtils.executeSqlScript(...) वास्तव में सबसे अच्छा समाधान है, क्योंकि यह अधिक रखरखाव और परीक्षण किया गया है।

संपादित करें: SimpleJdbcTestUtils बहिष्कृत है आपको JdbcTestUtils उपयोग करना चाहिए लिंक अपडेट किया गया

स्प्रिंग फ्रेमवर्क के ResourceDatabasePopulator मदद कर सकता है। जैसा आपने कहा था कि आप MySQL और JDBC का प्रयोग कर रहे हैं, मान लें कि आपके पास MySQL- समर्थित DataSource उदाहरण तैयार है। इसके अलावा, मान लें कि आपकी MySQL स्क्रिप्ट फाइलें क्लासपाथ-लोटेटेबल हैं। मान लीजिए कि आप युद्ध लेआउट का उपयोग कर रहे हैं और स्क्रिप्ट फ़ाइलों को एक निर्देशिका src/main/webapp/resources/mysql-scripts/... या src/test/resources/mysql-scripts/... । तो आप इस तरह एसक्यूएल स्क्रिप्ट निष्पादित करने के लिए ResourceDatabasePopulator का उपयोग कर सकते हैं:

 import org.springframework.jdbc.datasource.init.ResourceDatabasePopulator; import javax.sql.DataSource; DataSource dataSource = getYourMySQLDriverBackedDataSource(); ResourceDatabasePopulator rdp = new ResourceDatabasePopulator(); rdp.addScript(new ClassPathResource( "mysql-scripts/firstScript.sql")); rdp.addScript(new ClassPathResource( "mysql-scripts/secondScript.sql")); try { Connection connection = dataSource.getConnection(); rdp.populate(connection); // this starts the script execution, in the order as added } catch (SQLException e) { e.printStackTrace(); } 

साधारण एसक्यूएल स्क्रिप्ट के लिए ';' आप इस सरल कार्य का उपयोग कर सकते हैं यह टिप्पणी को हटा दें और एक-एक करके एक-एक ब्योरा चलाएं

  static void executeScript(Connection conn, InputStream in) throws SQLException { Scanner s = new Scanner(in); s.useDelimiter("/\\*[\\s\\S]*?\\*/|--[^\\r\\n]*|;"); Statement st = null; try { st = conn.createStatement(); while (s.hasNext()) { String line = s.next().trim(); if (!line.isEmpty()) st.execute(line); } } finally { if (st != null) st.close(); } } 

@ पैन्टलिस सोपासाकिस

गीथहब पर थोड़ा संशोधित संस्करण: https://gist.github.com/831762/

इसमें सुधारों को ट्रैक करना आसान है

एसक्यूएल स्क्रिप्ट रनर (जो मैं भी उपयोग कर रहा हूं) के बारे में, मैंने निम्न कोड का टुकड़ा देखा:

 for (int i = 0; i < cols; i++) { String value = rs.getString(i); print(value + "\t"); } 

हालांकि, विधि getString (int) के लिए एपीआई दस्तावेज़ीकरण में यह उल्लेख किया गया है कि अनुक्रमित 1 से शुरू होता है , इसलिए यह हो जाना चाहिए:

 for (int i = 1; i <= cols; i++) { String value = rs.getString(i); print(value + "\t"); } 

दूसरा, ScriptRunner के कार्यान्वयन के लिए सहायता प्रदान नहीं करता है DELIMITER एसक्यूएल स्क्रिप्ट में बयान जो महत्वपूर्ण हैं यदि आपको ट्रिगर या प्रक्रियाओं को संकलित करने की आवश्यकता है इसलिए मैंने ScriptRunner का यह संशोधित संस्करण बनाया है: http://pastebin.com/ZrUcDjSx जो मुझे उम्मीद है कि आपको उपयोगी मिलेगा।

स्क्रिप्ट चलाने के लिए एक और दिलचस्प विकल्प का उपयोग करने के लिए जिस्क्यूल का उपयोग किया जाएगा। चूंकि स्रोत कोड उपलब्ध है, इसलिए इसे किसी एप्लिकेशन में एम्बेड करना संभव है।


संपादित करें: इसे एक सावधानीपूर्वक नज़र रखना; इसे कुछ और अंदर एम्बेड करना इसके स्रोत कोड में कुछ बदलाव की आवश्यकता होगी।

क्या आप इसका उपयोग कर सकते हैं:

 public static void executeSQL(File f, Connection c) throws Exception { BufferedReader br = new BufferedReader(new FileReader(f)); String sql = "", line; while ((line = br.readLine()) != null) sql += (line+"\n"); c.prepareCall(sql).execute(sql); } 

कोड लिखें:

  1. SQL कथन के एक नंबर वाले फ़ाइल में पढ़ें
  2. प्रत्येक SQL कथन को चलाएं

ऐसा करने का वास्तव में कोई तरीका नहीं है

आप या तो रनटाइम.एक्सएसी (स्ट्रिंग []) के माध्यम से mysql कमांड लाइन क्लाइंट को चला सकते हैं और इस ऑप्शन को पढ़ सकते हैं जब आप इस विकल्प का निर्णय लेते हैं

या इबेटिस से ScriptRunner (com.ibatis.common.jdbc.ScriptRunner) का उपयोग करने का प्रयास करें लेकिन यह पूरी तरह से एक स्क्रिप्ट चलाने के लिए एक संपूर्ण पुस्तकालय को शामिल करने के लिए एक बेवकूफी है

ओरेकल पीएल / एसक्यूएल के लिए, ओरेकल जेडीबीसी-चालक वास्तव में पूरे एसक्यूएल-स्क्रिप्ट को संग्रहित प्रक्रियाओं और गुमनाम ब्लॉकों (पीएल / एसक्यूएल विशिष्ट नोटेशन) सहित क्रियान्वित करने में सहायता करता है, देखें

जेडीबीसी ड्राइवरों पीएल / एसक्यूएल संग्रहित प्रक्रियाओं का उपयोग कर सकते हैं?

ओरेकल जेडीबीसी ड्राइवर सामान्य प्रश्न में अधिक जानकारी है:

ओरेकल जेडीबीसी ड्राइवरों पीएल / एसक्यूएल संग्रहित प्रक्रियाओं और बेनामी ब्लॉक के निष्पादन का समर्थन करते हैं। वे दोनों SQL92 एस्केप सिंटैक्स और ओरेकल पीएल / एसक्यूएल ब्लॉक सिंटैक्स का समर्थन करते हैं। निम्नलिखित पीएल / एसकॉल कॉल किसी ओरेकल जेडीबीसी ड्राइवर के साथ काम करेंगे:

 // SQL92 syntax CallableStatement cs1 = conn.prepareCall ( "{call proc (?,?)}" ) ; // stored proc CallableStatement cs2 = conn.prepareCall ( "{? = call func (?,?)}" ) ; // stored func // Oracle PL/SQL block syntax CallableStatement cs3 = conn.prepareCall ( "begin proc (?,?); end;" ) ; // stored proc CallableStatement cs4 = conn.prepareCall ( "begin ? := func(?,?); end;" ) ; // stored func 

फाइल में पढ़ना और सामग्री को तैयार करने के लिए तैयार होना चाहिए कॉल () – विधि

मावेन एसक्यूएल प्लगइन एसक्यूएल स्टेटमेंट्स को फाइल या फ़ाइल की सूची के माध्यम से चलाने के लिए इस प्लगइन का उपयोग करें

  1. SqlCommand
  2. srcFiles 3.fileset कॉन्फ़िगरेशन