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

JDBC में JTable पर डेटा कॉलिंग का अनुकूलन करें

IMHO खराब स्थायीता की जड़ है आप अनावश्यक रूप से डेटा (कॉलम, पंक्तियों, पंक्तियों की संख्या, कॉलम संख्या, आदि) प्राप्त करने के लिए डेटाबेस को कई बार क्वेरी करते हैं:

कॉलम नंबर प्राप्त करने के लिए:

ResultSet rs = stmt.executeQuery("SELECT * FROM " + tableName);

पंक्तियों की संख्या प्राप्त करने के लिए:

ResultSet rs = stmt.executeQuery("SELECT COUNT(*) FROM " + tableName);

पंक्तियाँ प्राप्त करने के लिए (यह एक लूप के अंदर सबसे खराब बीक्यूज़ है):

data = stmt.executeQuery("SELECT " + columnName + " FROM " + tableName + " LIMIT " + j + ", " + 1);

इसे कैसे हल करें

बस एक बार डेटाबेस को क्वेरी करें। एक एकल ResultSet और इससे जुड़े ResultSetMetaData अपने लक्ष्य को पूरा करने के लिए पर्याप्त होना चाहिए। अतिरिक्त, और जैसा कि पहले ही सुझाव दिया गया है, एक SwingWorker . का उपयोग करें एक अलग थ्रेड में डेटाबेस कॉल करने के लिए। उदाहरण के लिए:

final JTable table = new JTable();

SwingWorker<Void, TableModel> worker = new SwingWorker<Void, TableModel> () {

    @Override
    protected Void doInBackground() throws Exception {

        ResultSet resultSet = stmt.executeQuery("SELECT * FROM " + tableName);
        ResultSetMetaData metaData = resultSet.getMetaData();

        int columnCount = metaData.getColumnCount(); // columns number
        String[] columnNames = new String[columnCount];
        for (int i = 1; i <= columnCount; i++) {
            columnNames[i] = metaData.getColumnName(i); // fill columns names
        }

        resultSet.last();
        int rowCount = resultSet.getRow(); // get rows number
        resultSet.beforeFirst();

        Object[][] data = new Object[rowCount][columnCount];
        int currentRow = 0;
        while (resultSet.next()) {
            for (int currentColumn = 1; currentColumn <= columnCount; currentColumn++) {
                data[currentRow][currentColumn - 1] = resultSet.getObject(currentColumn); // fill data set
             }
             currentRow++;
        }

        TableModel model = new DefaultTableModel(data, columnNames);
        publish(model);

        return null;
    }

    @Override
    protected void process(List<TableModel> chunks) {
        TableModel model = chunks.get(0);
        table.setModel(model);
    }
}

worker.execute();



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. क्वेरी में निर्दिष्ट आदेश द्वारा SQL क्रमित करें

  2. एकाधिक कॉलम पर FULLTEXT अनुक्रमणिका कैसे बनाएं?

  3. MySQL सर्वर को एक सेवा के रूप में प्रारंभ करें (विन 8)

  4. MySQL में एक टेबल का नाम बदलें

  5. आश्रित ड्रॉपडाउन बॉक्स केकपीएचपी 3