Mysql
 sql >> डेटाबेस >  >> RDS >> Mysql

आंकड़ों को अपडेट करने में बिना किसी अंतराल और त्रुटि के MySQL डेटा अपडेटिंग/स्टोरिंग का उपयोग करने का सही तरीका

सबसे पहले:

जहां तक ​​​​मैं देख सकता हूं, आप क्वेरी/अपडेट निष्पादित करने के बाद हर बार कनेक्शन बंद कर रहे हैं। यह दुर्भाग्य से काफी प्रदर्शनकारी है। यह बेहतर होगा कि प्लगइन शुरू होने पर एक MySQL कनेक्शन खोला और प्लगइन बंद होने पर इसे फिर से बंद कर दें।

मैंने व्यक्तिगत रूप से इसे इस तरह से बनाया है:(इसका मतलब यह नहीं है कि आपको इसे इस तरह से करना होगा)

कनेक्शन चर:

private static Connection connection;

कनेक्ट फ़ंक्शन:

    public static void connect(String host, String user, String password, String database) {
    Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), () -> {

        //close Connection if still active
        if (connection != null) {
            close();
        }

        //connect to database host
        try {
            Class.forName("com.mysql.jdbc.Driver");

            connection = DriverManager.getConnection("jdbc:mysql://" + host + "/" + database, user, password);

        } catch (SQLException e) {
          System.out.println(e.getMessage());
        }

    });
}

डेटाबेस में प्रविष्टियों को अद्यतन/लिखने के लिए मेरा कार्य:

    public void Update(final String qry) {
    Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), () -> {
        try {
            Statement stnt = connection.createStatement();
            stnt.executeUpdate(qry);

        } catch (SQLException e) {
            e.printStackTrace();
        }
    });

}

डेटाबेस से जानकारी पूछने के लिए मेरा कार्य:

जैसा कि आप देख सकते हैं कि यह फ़ंक्शन अतुल्यकालिक नहीं है। दुर्भाग्य से मैंने इस फ़ंक्शन को एसिंक्रोनस प्राप्त करने के लिए इसे अब तक प्रबंधित नहीं किया है। लेकिन आप फ़ंक्शन कॉल को एसिंक्रोनस बनाकर आसानी से इसे हल कर सकते हैं। उदा: Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), () -> { Query("your query"); });

    public ResultSet Query(String qry) {
    ResultSet rs = null;

    try {
        Statement stnt = connection.createStatement();
        rs = stnt.executeQuery(qry);
    } catch (SQLException e) {
        e.printStackTrace();
    }
    return rs;
}

क्लोज फंक्शन:

    public static void close() {
    Bukkit.getScheduler().runTaskAsynchronously(Main.getInstance(), () -> {
        try {
            connection.close();
        } catch (SQLException e) {
            System.out.println(e.getMessage());
        }
    });
}

इस तरह का एक नुकसान यह है कि आप एक समय में केवल एक डेटाबेस से जुड़ सकते हैं (जो मेरे मामले में ठीक था)।

आशा है कि यह आपकी मदद करता है। मैंने अजीब MySQL त्रुटियों के साथ भी बहुत संघर्ष किया। सौभाग्य से इस कोड के साथ सब कुछ ठीक काम करता है।

आपके प्रश्न का उत्तर देने के लिए:

[22:31:18] [Craft Scheduler Thread - 71/WARN]: Caused by: java.io.EOFException: Can not read response from server. Expected to read 4 bytes, read 0 bytes before connection was unexpectedly lost.

जहां तक ​​​​मुझे पता है इसका मतलब है कि प्लगइन का उपयोग करने का प्रयास करने के बावजूद MySQL सर्वर से कनेक्शन बंद है। जैसा कि ऊपर बताया गया है कि शुरुआत में एक कनेक्शन खोलना और प्लगइन बंद होने तक इसे खुला छोड़ना इसे ठीक करना चाहिए।



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. पीडीओ उन्नत सीआरयूडी जेनरेटर टूल के साथ जल्दी से एक PHP सीआरयूडी इंटरफेस बनाएं

  2. मैक ओएस एक्स शेर पर mysql2 रत्न स्थापित करना

  3. Azure ऐप सेवा आयात त्रुटि:libmysqlclient.so.18:साझा ऑब्जेक्ट फ़ाइल नहीं खोल सकता:ऐसी कोई फ़ाइल या निर्देशिका नहीं

  4. डीबी तालिका में सत्र संग्रहीत करना काम नहीं कर रहा है (Zend_Session_SaveHandler_DbTable का उपयोग करके)

  5. मध्य पंक्तियों में एक नई पंक्ति डालने के लिए MySQL सिंटैक्स?