दिलचस्प पोस्ट
अगर मैं फ़ायरबेस सरल यूज़रनेम और पासवर्ड प्रमाणीकरण का उपयोग करता हूं तो मैं उपयोगकर्ताओं की सूची कैसे वापस करूँ? जावा एक्सएमएल लाइब्रेरी क्या है (dom4j को बदलने के लिए)? ओपनसीवी 3.0 के साथ लिंक करते समय 'अनसुलझे बाहरी प्रतीक' त्रुटि WordPress में और अधिक पोस्ट्स अजाक्स बटन लोड करें ईवेंट हैंडलर निष्पादन का आदेश पुनरावर्ती या परिवर्तन? एक यूआरएल (रेगेक्स) के हिस्से प्राप्त करना विंडोज़ 8 पर पीएचपी मेल फ़ंक्शन के साथ ईमेल नहीं भेज सकता एचटीटीपी समर्थन के साथ एचटीटीप्लेस्टनर TFS विशिष्ट संस्करण अलग फ़ोल्डर में प्राप्त करें कंसोल रिटर्न अनिर्धारित JavaMail API को iMail – java.net.SocketException: अनुमति अस्वीकृत: कनेक्ट करें Appcompat 21 में टूलबार का रंग बदलें मैं आईओआरएएम के भीतर DOM तत्वों तक कैसे पहुंच सकता हूं विंडोज 7, update.packages समस्या: "अस्थायी स्थापना को स्थानांतरित करने में असमर्थ"?

जेएसडीसी के साथ 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 स्क्रिप्ट चलाने का एक तरीका है?

वेब के समाधान से एकत्रित समाधान "जेएसडीसी के साथ 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 कॉन्फ़िगरेशन