2016-10-27 13 views
5

काम नहीं कर रहा हूं मैं सीख रहा हूं कि जावा के साथ एसक्यूएल का उपयोग कैसे करें। मैंने जेडीबीसी ड्राइवर को सफलतापूर्वक स्थापित किया है और मैं डेटाबेस से रिकॉर्ड्स पढ़ने और स्क्रीन पर प्रिंट करने में सक्षम हूं।जावा में एक्सीक्यूट अपडेट एसक्यूएल कथन

मेरी समस्या तब होती है जब कोई अद्यतन या सम्मिलित कथन करने का प्रयास किया जाता है, जहां कुछ भी नहीं होता है।

विधि जहां समस्या रहता

public static void updateSchools(ArrayList<String> newSchool) 
{ 
    try 
    { 
     openDatabase(); 
     stmt = c.createStatement(); 
     int numberOfRows = stmt.executeUpdate("UPDATE schools SET address='abc' WHERE abbreviation='2';"); 
     System.out.println(numberOfRows); 
     closeDatabase(); 
    } 
    catch (Exception e) 
    { 
     System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
     System.exit(0); 
    } 
} 

समर्थन कार्यों

public static void openDatabase() 
{ 
    c = null; 
    stmt = null; 
    try 
    { 
     Class.forName("org.postgresql.Driver"); 
     c = DriverManager.getConnection("jdbc:postgresql://localhost:5432/Badminton", "postgres", "postgrespass"); 
     c.setAutoCommit(false); 
    } 
    catch (Exception e) 
    { 
     System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
     System.exit(0); 
    } 
    System.out.println("Database opened successfully"); 
} 

public static void closeDatabase() 
{ 
    try 
    { 
     stmt.close(); 
     c.close(); 
    } 
    catch (Exception e) 
    { 
     System.err.println(e.getClass().getName() + ": " + e.getMessage()); 
     System.exit(0); 
    } 
    System.out.println("Database closed successfully"); 
} 

यहाँ मेरी बहुत ही सरल डेटाबेस की एक छवि है: enter image description here

यहाँ मेरी कोड है कंसोल में परिणाम एफ है ollowing, हालांकि किसी डेटाबेस में परिवर्तन किया गया:

डाटाबेस सफलतापूर्वक

खोला

डाटाबेस पहले से सफलतापूर्वक

धन्यवाद बंद कर दिया!

+0

";" का उपयोग न करें यह एसक्यूएल तोड़ सकता है; क्या आपको कोई अपवाद मिल रहा है? – karelss

+0

माबे आपको अपने डीबी को रीफ्रेश करने की आवश्यकता है, या 'c.setAutoCommit (True); ' – Sami

+0

पोस्टर्रेस से @ karelss [दस्तावेज़ीकरण] (https://www.postgresql.org/docs/6.4/static/install12418.htm) : 'उन एसक्यूएल अर्धविरामों को शामिल करने की आदत में जाओ –

उत्तर

7

विधि openDatabase विधि से निकालें।

या

updateSchool विधि के अंत में c.commit() जोड़ें।

ऑटो-प्रतिबद्ध मोड अक्षम होने के बाद, कोई SQL कथन तब तक प्रतिबद्ध नहीं है जब तक आप विधि को स्पष्ट रूप से कॉल नहीं करते। विधि प्रतिबद्धता के पिछले कॉल के बाद निष्पादित सभी बयान वर्तमान लेनदेन में में शामिल किए गए हैं और एक इकाई के रूप में एक साथ किए गए हैं।

+0

आपको बहुत धन्यवाद, मेरा कोड अब इरादे के अनुसार काम करता है:)। –

+0

एक स्पष्टीकरण क्यों समस्या हल करता है आपके उत्तर में केवल इतना अतिरिक्त जोड़ देगा। –

+0

मेरी डालने और अपडेट क्वेरी डेटाबेस के लिए प्रतिबद्ध नहीं थीं, इसलिए मुझे कोई बदलाव नहीं दिखाई देगा। एक बार जब मैंने अपने परिचालन के बाद प्रतिबद्धता रेखा जोड़ दी, तो परिवर्तन सफलतापूर्वक किए गए। –

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