Получить данные из коллекции MongoDB в Swing JTable

Я новичок в проектах баз данных. Я не знаю, как отобразить коллекцию в mongodb внутри качающегося окна (EDIT: JTable) после подключения к серверу базы данных... пожалуйста, помогите мне в этом... Я пытался сделать это в sql, но я не могу сделать с помощью mongodb

JButton btnDisplay = new JButton("display");
    btnDisplay.addActionListener(new ActionListener() {
        public void actionPerformed(ActionEvent e) {
            try {
                // To connect to mongodb server
                MongoClient mongoClient = new MongoClient( "localhost" , 27017 );
                // Now connect to your databases
                DB db = mongoClient.getDB( "test" );
                System.out.println("Connect to database successfully");

                DBCollection coll = db.getCollection("cars");
                DBCursor cursor = coll.find();
            }

            catch (Exception a) {
                a.printStackTrace();
            }
        }
    });

person darshan chandra    schedule 28.10.2014    source источник


Ответы (1)


DBCursor предназначен для повторения. Вы можете использовать DBCursor#hasNext(), например вы бы использовали обычный Iterator, а DBCursor#next()< /a> для получения следующего DBObject. DBObject позволяет вам get так же, как и Map, путем передачи ключа

Допустим, у нас есть коллекция table в базе данных swingtest со следующими документами

{ "_id" : ObjectId("5450700691a43786388fcc8f"), "first" : "Stack", "last" : "Overflow" }
{ "_id" : ObjectId("5450704d91a43786388fcc90"), "first" : "Pee", "last" : "Skillet" }
{ "_id" : ObjectId("5450705a91a43786388fcc91"), "first" : "Hello", "last" : "World" }
{ "_id" : ObjectId("545070b091a43786388fcc92"), "first" : "Mongo", "last" : "DB" }

На самом деле вы не указали, что вы хотите сделать с коллекцией, поэтому, допустим, вы хотите добавить данные в JTable, вы можете сделать что-то вроде

MongoClient mongoClient = null;
DBCursor cursor = null;
try {
    mongoClient = new MongoClient( "localhost" , 27017 );
    DB db = mongoClient.getDB( "swingtest" );
    DBCollection coll = db.getCollection("table");
    cursor = coll.find();

    String[] columnNames = {"id", "First", "Last"};
    DefaultTableModel model = new DefaultTableModel(columnNames, 0);

    while(cursor.hasNext()) {
        DBObject obj = cursor.next();
        String first = (String)obj.get("first");
        String last = (String)obj.get("last");
        ObjectId id = (ObjectId)obj.get("_id");
        model.addRow(new Object[] { id, first, last });
    }
    table.setModel(model);

    cursor.close(); 
    mongoClient.close();
}

где для каждой итерации (документа) мы получаем значения _id, first и last, затем создаем строку, в которую добавляем DefaultTableModel. В конце итерации мы устанавливаем модель для JTable.

Вот полный пример

введите здесь описание изображения

import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import java.awt.BorderLayout;
import java.awt.Dimension;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.net.UnknownHostException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.SwingUtilities;
import javax.swing.table.DefaultTableModel;
import org.bson.types.ObjectId;

public class MongoStackoverflow {
    private static JTable table;

    public static void main(String[] args) {
        Runnable runnable = new Runnable() {
            public void run() {
                table = new JTable(){
                    @Override
                    public Dimension getPreferredScrollableViewportSize() {
                        return new Dimension(300, 150);
                    }
                };
                JPanel panel = new JPanel(new BorderLayout());
                JButton button = new JButton("Show Data");
                button.addActionListener(listener);
                panel.add(new JScrollPane(table));
                panel.add(button, BorderLayout.PAGE_END);
                JOptionPane.showMessageDialog(null, panel);
            }
        };
        SwingUtilities.invokeLater(runnable);
    }

    static ActionListener listener = new ActionListener() {
        @Override
        public void actionPerformed(ActionEvent e) {
            MongoClient mongoClient = null;
            DBCursor cursor = null;
            try {
                mongoClient = new MongoClient( "localhost" , 27017 );
                DB db = mongoClient.getDB( "swingtest" );
                DBCollection coll = db.getCollection("table");
                cursor = coll.find();

                String[] columnNames = {"id", "First", "Last"};
                DefaultTableModel model = new DefaultTableModel(columnNames, 0);

                while(cursor.hasNext()) {
                    DBObject obj = cursor.next();
                    String first = (String)obj.get("first");
                    String last = (String)obj.get("last");
                    ObjectId id = (ObjectId)obj.get("_id");
                    model.addRow(new Object[] { id, first, last });
                }
                table.setModel(model);

                cursor.close(); 
                mongoClient.close();
            } catch (UnknownHostException ex) {
                Logger.getLogger(MongoStackoverflow.class.getName()).log(Level.SEVERE, null, ex);
            } finally {
                if (cursor!= null) {
                    cursor.close();
                }
                if (mongoClient != null) {
                     mongoClient.close();
                }   
            }
        }
    }; 
}

Ресурс

person Paul Samsotha    schedule 29.10.2014
comment
сэр, большое спасибо за то, что посвятили свое драгоценное время ответу на мой вопрос... на самом деле вы правильно ответили на то, что мне было нужно, хотя я не упомянул об этом должным образом... еще раз спасибо... - person darshan chandra; 29.10.2014
comment
сэр, у меня есть еще одна проблема, связанная с тем же проектом... я тоже задавал вопрос об этом... пожалуйста, помогите мне в этом... - person darshan chandra; 25.11.2014