⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 resultsettable.java

📁 sun公司开发的,java2核心技术,卷II:高级性能,包括一系列的高级java应用技术,如数据库德连接,高级swing,多线程,软件本地化等等,本文件中则包含该书中的所用实例,配合该书使用,使对ja
💻 JAVA
字号:
/**
 * @version 1.00 1999-07-17
 * @author Cay Horstmann
 */

import java.awt.*;
import java.awt.event.*;
import java.sql.*;
import java.util.*;
import javax.swing.*;
import javax.swing.table.*;

public class ResultSetTable
{  public static void main(String[] args)
   {  JFrame frame = new ResultSetFrame();
      frame.show();
   }
}

/* this class is the base class for the scrolling and the
   caching result set table model. It stores the result set
   and its metadata.
*/

abstract class ResultSetTableModel extends AbstractTableModel
{  public ResultSetTableModel(ResultSet aResultSet)
   {  rs = aResultSet;
      try
      {  rsmd = rs.getMetaData();
      }
      catch(SQLException e)
      {  System.out.println("Error " + e);
      }
   }

   public String getColumnName(int c)
   {  try
      {  return rsmd.getColumnName(c + 1);
      }
      catch(SQLException e)
      {  System.out.println("Error " + e);
         return "";
      }
   }

   public int getColumnCount()
   {  try
      {  return rsmd.getColumnCount();
      }
      catch(SQLException e)
      {  System.out.println("Error " + e);
         return 0;
      }
   }

   protected ResultSet getResultSet()
   {  return rs;
   }

   private ResultSet rs;
   private ResultSetMetaData rsmd;
}

/* this class uses a scrolling cursor, a JDBC 2 feature
*/

class ScrollingResultSetTableModel extends ResultSetTableModel
{  public ScrollingResultSetTableModel(ResultSet aResultSet)
   {  super(aResultSet);
   }

   public Object getValueAt(int r, int c)
   {  try
      {  ResultSet rs = getResultSet();
         rs.absolute(r + 1);
         return rs.getObject(c + 1);
      }
      catch(SQLException e)
      {  System.out.println("Error " + e);
         return null;
      }
   }

   public int getRowCount()
   {  try
      {  ResultSet rs = getResultSet();
         rs.last();
         return rs.getRow();
      }
      catch(SQLException e)
      {  System.out.println("Error " + e);
         return 0;
      }
   }
}

/* this class caches the result set data; it can be used
   if scrolling cursors are not supported
*/

class CachingResultSetTableModel extends ResultSetTableModel
{  public CachingResultSetTableModel(ResultSet aResultSet)
   {  super(aResultSet);
      try
      {  cache = new ArrayList();
         int cols = getColumnCount();
         ResultSet rs = getResultSet();

         /* place all data in an array list of Object[] arrays
            We don't use an Object[][] because we don't know
            how many rows are in the result set
         */

         while (rs.next())
         {  Object[] row = new Object[cols];
            for (int j = 0; j < row.length; j++)
               row[j] = rs.getObject(j + 1);
            cache.add(row);
         }
      }
      catch(SQLException e)
      {  System.out.println("Error " + e);
      }
   }

   public Object getValueAt(int r, int c)
   {  if (r < cache.size())
         return ((Object[])cache.get(r))[c];
      else
         return null;
   }

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

   private ArrayList cache;
}

class ResultSetFrame extends JFrame
   implements ActionListener
{  public ResultSetFrame()
   {  setTitle("ResultSet");
      setSize(300, 200);
      addWindowListener(new WindowAdapter()
         {  public void windowClosing(WindowEvent e)
            {  System.exit(0);
            }
         } );

      /* find all tables in the database and add them to
         a combo box
      */

      Container contentPane = getContentPane();
      tableNames = new JComboBox();
      tableNames.addActionListener(this);
      JPanel p = new JPanel();
      p.add(tableNames);
      contentPane.add(p, "North");

      try
      {  Class.forName("com.pointbase.jdbc.jdbcDriver");
            // force loading of driver
         String url = "jdbc:pointbase:corejava";
         String user = "PUBLIC";
         String password = "PUBLIC";
         con = DriverManager.getConnection(url, user,
            password);
         if (SCROLLABLE)
            stmt = con.createStatement(
               ResultSet.TYPE_SCROLL_INSENSITIVE,
               ResultSet.CONCUR_READ_ONLY);
         else
            stmt = con.createStatement();
         DatabaseMetaData md = con.getMetaData();
         ResultSet mrs = md.getTables(null, null, null,
            new String[] { "TABLE" });
         while (mrs.next())
            tableNames.addItem(mrs.getString(3));
          mrs.close();
      }
      catch(ClassNotFoundException e)
      {  System.out.println("Error " + e);
      }
      catch(SQLException e)
      {  System.out.println("Error " + e);
      }
   }

   public void actionPerformed(ActionEvent evt)
   {  if (evt.getSource() == tableNames)
      {  // show the selected table from the combo box

         if (scrollPane != null)
            getContentPane().remove(scrollPane);
         try
         {  String tableName
               = (String)tableNames.getSelectedItem();
            if (rs != null) rs.close();
            String query = "SELECT * FROM " + tableName;
            rs = stmt.executeQuery(query);
            if (SCROLLABLE)
               model = new ScrollingResultSetTableModel(rs);
            else
               model = new CachingResultSetTableModel(rs);

            JTable table = new JTable(model);
            scrollPane = new JScrollPane(table);
            getContentPane().add(scrollPane, "Center");
            pack();
            doLayout();
         }
         catch(SQLException e)
         {  System.out.println("Error " + e);
         }
      }
   }

   private JScrollPane scrollPane;
   private ResultSetTableModel model;
   private JComboBox tableNames;
   private JButton nextButton;
   private JButton previousButton;
   private ResultSet rs;
   private Connection con;
   private Statement stmt;

   private static boolean SCROLLABLE = false;
      // set to true if your database supports scrolling cursors
}

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -