[Last Call] Learn how to a build a cloud-first strategyRegister Now

x
  • Status: Solved
  • Priority: Medium
  • Security: Public
  • Views: 537
  • Last Modified:

How to assign the resultset to grid in swings.

Here in this code the result in displayed on window. How to put the result in grid or something like grid in swings
//Select data from table
import java.sql.*;
class sqlselect
{
public static void main(String args[]) throws Exception
      {
            String ename,ecity;

            Connection conn;      
            Statement stmt;
            ResultSet rs;

            //initialize and load the JDBC-ODBC Driver
            Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
            
            //to get a datbase connection
            conn=DriverManager.getConnection("jdbc:odbc:mydsn","","");
      
            //to create a statement object to execute SQL statement
            stmt=conn.createStatement();
            //Sends the sql statemtent to the DBMS & executes
            rs=stmt.executeQuery("select * from emp");
      
            System.out.println("Empno\tName\tCity\n");
            while(rs.next())
            {
                  ename=rs.getString(1);
                  ecity=rs.getString(2);
                  System.out.println(ename+"\t"+ecity+"\n");
            }
      }
}
0
searchsanjaysharma
Asked:
searchsanjaysharma
1 Solution
 
for_yanCommented:
You can have a JTable and associate its TableModel object with the ResultSet
0
 
for_yanCommented:
0
Concerto Cloud for Software Providers & ISVs

Can Concerto Cloud Services help you focus on evolving your application offerings, while delivering the best cloud experience to your customers? From DevOps to revenue models and customer support, the answer is yes!

Learn how Concerto can help you.

 
for_yanCommented:

This is another way which uses additional Jar and DbUtils class:
http://technojeeves.com/joomla/index.php/free/59-resultset-to-tablemodel
0
 
for_yanCommented:
and this simple code snippet how to transfer ResultSet to JTable form
http://www.rgagnon.com/javadetails/java-0309.html

// TableModel definition
String[] tableColumnsName = {"col 1","col 2","col 3"}; 
DefaultTableModel aModel = (DefaultTableModel) aTable.getModel();
aModel.setColumnIdentifiers(tableColumnsName);

// the query
ResultSet rs = 
   statement.executeQuery("select col1,col2,col3 from mytable");

// Loop through the ResultSet and transfer in the Model
java.sql.ResultSetMetaData rsmd = rs.getMetaData();
int colNo = rsmd.getColumnCount();
while(rs.next()){
 Object[] objects = new Object[colNo];
 // tanks to umit ozkan for the bug fix!
 for(int i=0;i<colNo;i++){
  objects[i]=rs.getObject(i+1);
  }
 aModel.addRow(objects);
}
aTable.setModel(aModel);

Open in new window

0
 
for_yanCommented:
This is actually a very good example
from the above link;
http://www.java2s.com/Code/Java/Swing-JFC/ResultSetandJTable.htm 
- I just
tested it with my mySql connection.
I already put your driver and URL -
if you compile it and paste the query
select * from emp
into the query field
(you don't even need URL, as it is already encoded - you'll see
the table coming up)
I belive it is very good illustartion how
table model from sql works - everything determined by the resultSet

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.Statement;
import java.util.Vector;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JPanel;
import javax.swing.JScrollPane;
import javax.swing.JTable;
import javax.swing.JTextField;
import javax.swing.table.AbstractTableModel;

public class DatabaseTest extends JFrame {

  JTextField hostField;

  JTextField queryField;

  QueryTableModel qtm;

  public DatabaseTest() {
    super("Database Test Frame");
    setDefaultCloseOperation(EXIT_ON_CLOSE);
    setSize(350, 200);

    qtm = new QueryTableModel();
    JTable table = new JTable(qtm);
    JScrollPane scrollpane = new JScrollPane(table);
    JPanel p1 = new JPanel();
    p1.setLayout(new GridLayout(3, 2));
    p1.add(new JLabel("Enter the Host URL: "));
    p1.add(hostField = new JTextField());
    p1.add(new JLabel("Enter your query: "));
    p1.add(queryField = new JTextField());
    p1.add(new JLabel("Click here to send: "));

    JButton jb = new JButton("Search");
    jb.addActionListener(new ActionListener() {
      public void actionPerformed(ActionEvent e) {
        qtm.setHostURL(hostField.getText().trim());
        qtm.setQuery(queryField.getText().trim());
      }
    });
    p1.add(jb);
    getContentPane().add(p1, BorderLayout.NORTH);
    getContentPane().add(scrollpane, BorderLayout.CENTER);
  }

  public static void main(String args[]) {
    DatabaseTest tt = new DatabaseTest();
    tt.setVisible(true);
  }
}

//QueryTableModel.java
//A basic implementation of the TableModel interface that fills out a Vector of
//String[] structures from a query's result set.
//

class QueryTableModel extends AbstractTableModel {
  Vector cache; // will hold String[] objects . . .

  int colCount;

  String[] headers;

  Connection db;

  Statement statement;

  String currentURL;
    Connection conn;

  public QueryTableModel() {
    cache = new Vector();
     

  }

  public String getColumnName(int i) {
    return headers[i];
  }

  public int getColumnCount() {
    return colCount;
  }

  public int getRowCount() {
    return cache.size();
  }

  public Object getValueAt(int row, int col) {
    return ((String[]) cache.elementAt(row))[col];
  }

  public void setHostURL(String url) {
    if (url.equals(currentURL)) {
      // same database, we can leave the current connection open
      return;
    }
    // Oops . . . new connection required
    closeDB();
    initDB(url);
    currentURL = url;
  }

  // All the real work happens here; in a real application,
  // we'd probably perform the query in a separate thread.
  public void setQuery(String q) {
    cache = new Vector();
    try {
      // Execute the query and store the result set and its metadata
      ResultSet rs = statement.executeQuery(q);
      ResultSetMetaData meta = rs.getMetaData();
      colCount = meta.getColumnCount();

      // Now we must rebuild the headers array with the new column names
      headers = new String[colCount];
      for (int h = 1; h <= colCount; h++) {
        headers[h - 1] = meta.getColumnName(h);
      }

      // and file the cache with the records from our query. This would
      // not be
      // practical if we were expecting a few million records in response
      // to our
      // query, but we aren't, so we can do this.
      while (rs.next()) {
        String[] record = new String[colCount];
        for (int i = 0; i < colCount; i++) {
          record[i] = rs.getString(i + 1);
        }
        cache.addElement(record);
      }
      fireTableChanged(null); // notify everyone that we have a new table.
    } catch (Exception e) {
      cache = new Vector(); // blank it out and keep going.
      e.printStackTrace();
    }
  }

  public void initDB(String url) {
    try {
          Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");

   
              db =   DriverManager.getConnection("jdbc:odbc:mydsn","","");

      statement = db.createStatement();
    } catch (Exception e) {
      System.out.println("Could not initialize the database.");
      e.printStackTrace();
    }
  }

  public void closeDB() {
    try {
      if (statement != null) {
        statement.close();
      }
      if (db != null) {
        db.close();
      }
    } catch (Exception e) {
      System.out.println("Could not close the current connection.");
      e.printStackTrace();
    }
  }
}

Open in new window

0
 
for_yanCommented:
This is how it looks for my test_table query.

Just takes a query and creates JTable based on the result set
table-from-sql.PNG
0
 
searchsanjaysharmaAuthor Commented:
Thanx
0

Featured Post

Free Tool: Site Down Detector

Helpful to verify reports of your own downtime, or to double check a downed website you are trying to access.

One of a set of tools we are providing to everyone as a way of saying thank you for being a part of the community.

Tackle projects and never again get stuck behind a technical roadblock.
Join Now