Java/Database SQL JDBC/JDBC EJB

Материал из Java эксперт
Перейти к: навигация, поиск

Ejb and JDBC

   <source lang="java">

/* MySQL and Java Developer"s Guide Mark Matthews, Jim Cole, Joseph D. Gradecki Publisher Wiley, Published February 2003, ISBN 0471269239

  • /

import java.awt.BorderLayout; import java.awt.GridLayout; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.WindowAdapter; import java.awt.event.WindowEvent; import java.io.BufferedReader; import java.io.File; import java.io.FileNotFoundException; import java.io.FileReader; import java.io.IOException; import java.io.InputStreamReader; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Enumeration; import java.util.StringTokenizer; import java.util.Vector; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JMenu; import javax.swing.JMenuBar; import javax.swing.JMenuItem; import javax.swing.JOptionPane; import javax.swing.JPanel; import javax.swing.JPasswordField; import javax.swing.JTextField; import javax.swing.border.TitledBorder; public class TaskManager extends JFrame {

 TaskManager(Tasks taskList) {
   super("MySQL-Java Task Manager");
   this.taskList = taskList;
   buildGui();
   pack();
   setVisible(true);
 }
 private void buildGui() {
   fileMenu.add(fileExit);
   menuBar.add(fileMenu);
   setJMenuBar(menuBar);
   frameContainer.setLayout(new BorderLayout());
   frameContainer.add(new TaskPanel(taskList));
   setContentPane(frameContainer);
   addWindowListener(new WindowHandler());
   fileExit.addActionListener(new MenuHandler());
 }
 private JPanel frameContainer = new JPanel();
 private JMenuBar menuBar = new JMenuBar();
 private JMenu fileMenu = new JMenu("File");
 private JMenuItem fileExit = new JMenuItem("Exit");
 private Tasks taskList;
 class WindowHandler extends WindowAdapter {
   public void windowClosing(WindowEvent we) {
     System.exit(0);
   }
 }
 class MenuHandler implements ActionListener {
   public void actionPerformed(ActionEvent ae) {
     if (ae.getActionCommand().equals("Exit")) {
       System.exit(0);
     }
   }
 }
 public static void main(String[] args) {
   String configFileName = "tasks.conf";
   if (args.length == 1) {
     configFileName = args[0];
   }
   File configFile = new File(configFileName);
   if (!configFile.exists() || !configFile.canRead()) {
     System.err.println("Can"t read config file "" + configFileName
         + """);
     System.exit(1);
   }
   FileReader configReader = null;
   try {
     configReader = new FileReader(configFile);
   } catch (FileNotFoundException fnfX) {
   }
   Tasks taskList = new Tasks(configReader);
   try {
     configReader.close();
   } catch (IOException ioX) {
   }
   TaskManager ex = new TaskManager(taskList);
 }

} interface TaskDelegate {

 public boolean execute(Connection conn);

} class TaskPanel extends JPanel {

 public TaskPanel(Tasks taskList) {
   this.taskList = taskList;
   setLayout(new BorderLayout());
   connPane = new ConnectionPane();
   connPane.setBorder(new TitledBorder("Connection Data"));
   taskPane = new TaskPane();
   taskPane.setBorder(new TitledBorder("Tasks"));
   add(connPane, BorderLayout.NORTH);
   add(taskPane, BorderLayout.SOUTH);
 }
 private Tasks taskList;
 private ConnectionPane connPane;
 private TaskPane taskPane;
 class ConnectionPane extends JPanel {
   ConnectionPane() {
     setLayout(new GridLayout(5, 2));
     add(hostNameLabel);
     add(hostNameField);
     add(dbNameLabel);
     add(dbNameField);
     add(portNumberLabel);
     add(portNumberField);
     add(usernameLabel);
     add(usernameField);
     add(passwordLabel);
     add(passwordField);
   }
   ConnectionData getConnectionData() {
     String password = new String(passwordField.getPassword());
     ConnectionData data = new ConnectionData(hostNameField.getText(),
         dbNameField.getText(), portNumberField.getText(),
         usernameField.getText(), password);
     return (data);
   }
   private JLabel hostNameLabel = new JLabel("Host Name:");
   private JLabel dbNameLabel = new JLabel("Database Name:");
   private JLabel portNumberLabel = new JLabel("Port Number:");
   private JLabel usernameLabel = new JLabel("Username:");
   private JLabel passwordLabel = new JLabel("Password:");
   private JTextField hostNameField = new JTextField(20);
   private JTextField dbNameField = new JTextField(20);
   private JTextField portNumberField = new JTextField("3306", 6);
   private JTextField usernameField = new JTextField(20);
   private JPasswordField passwordField = new JPasswordField(20);
 }
 class TaskPane extends JPanel {
   TaskPane() {
     int taskCount = TaskPanel.this.taskList.getTaskCount();
     int rows = ((taskCount % COLS) == 0) ? (taskCount / COLS)
         : ((taskCount / COLS) + 1);
     setLayout(new GridLayout(rows, COLS));
     taskButtons = new JButton[taskCount];
     TaskHandler handler = new TaskHandler();
     Enumeration tasks = taskList.getTasks();
     int task = 0;
     while (tasks.hasMoreElements()) {
       TaskDefinition taskDef = (TaskDefinition) (tasks.nextElement());
       if (!taskDef.isEnabled()) {
         continue;
       }
       String taskName = taskDef.getName();
       taskButtons[task] = new JButton(taskName);
       taskButtons[task].addActionListener(handler);
       add(taskButtons[task++]);
     }
   }
   private JButton[] taskButtons;
   final static int COLS = 2;
 }
 class TaskHandler implements ActionListener {
   public void actionPerformed(ActionEvent ae) {
     ConnectionData connData = connPane.getConnectionData();
     Connection conn = connData.buildConnection();
     if (conn == null) {
       String msg = "Could not build connection. Check provided\n"
           + "connection data and verify server availability.";
       JOptionPane.showMessageDialog(TaskPanel.this, msg,
           "Connection Failure", JOptionPane.ERROR_MESSAGE);
       return;
     }
     String taskName = ae.getActionCommand();
     Enumeration tasks = taskList.getTasks();
     boolean dispatched = false;
     while (tasks.hasMoreElements()) {
       TaskDefinition taskDef = (TaskDefinition) (tasks.nextElement());
       if (!taskDef.isEnabled()) {
         continue;
       }
       if (taskName.equals(taskDef.getName())) {
         try {
           Class delegateClass = taskDef.getDelegate();
           Object delegateObject = delegateClass.newInstance();
           TaskDelegate delegate = (TaskDelegate) delegateObject;
           dispatched = delegate.execute(conn);
           if (!dispatched) {
             String msg = "Could not execute task: "
                 + taskDef.getName();
             JOptionPane.showMessageDialog(TaskPanel.this, msg,
                 "Task Failure", JOptionPane.ERROR_MESSAGE);
           }
         } catch (InstantiationException iX) {
           String msg = "Failed to instantiate delegate for task: "
               + taskDef.getName();
           JOptionPane.showMessageDialog(TaskPanel.this, msg,
               "Task Failure", JOptionPane.ERROR_MESSAGE);
         } catch (IllegalAccessException iaX) {
           String msg = "Cound not access delegate for task: "
               + taskDef.getName();
           JOptionPane.showMessageDialog(TaskPanel.this, msg,
               "Task Failure", JOptionPane.ERROR_MESSAGE);
         }
         break;
       }
     }
     if (!dispatched) {
       try {
         conn.close();
       } catch (SQLException sqlX) {
       }
     }
   }
 }

} class ConnectionData {

 public ConnectionData(String hostName, String dbName, String port,
     String username, String password) {
   this.hostName = hostName;
   this.dbName = dbName;
   this.port = port;
   this.username = username;
   this.password = password;
 }
 public String getUsername() {
   return (username);
 }
 public String getPassword() {
   return (password);
 }
 public String getUrl() {
   String url = "jdbc:mysql://" + hostName + ":" + port + "/" + dbName;
   return (url);
 }
 public Connection buildConnection() {
   try {
     Class.forName("com.mysql.jdbc.Driver");
   } catch (ClassNotFoundException cnfX) {
     cnfX.printStackTrace(System.err);
     return (null);
   }
   try {
     Connection conn = DriverManager.getConnection(getUrl(),
         getUsername(), getPassword());
     return (conn);
   } catch (SQLException sqlX) {
     System.out.println(SqlExceptionReader.readException(sqlX));
     return (null);
   }
 }
 private String hostName;
 private String dbName;
 private String port;
 private String username;
 private String password;

} class SqlExceptionReader {

 public static String readException(SQLException sqlX) {
   StringBuffer msg = new StringBuffer(1024);
   SQLException nextX;
   int exceptionNumber = 0;
   do {
     ++exceptionNumber;
     msg.append("Exception " + exceptionNumber + ": \n");
     msg.append("  Message: " + sqlX.getMessage() + "\n");
     msg.append("  State  : " + sqlX.getSQLState() + "\n");
     msg.append("  Code   : " + sqlX.getErrorCode() + "\n");
   } while ((nextX = sqlX.getNextException()) != null);
   return (msg.toString());
 }

} class Tasks {

 public Tasks(InputStreamReader taskS) {
   readTasks(taskS);
 }
 public int getTaskCount() {
   return (taskDefs.size());
 }
 public Enumeration getTasks() {
   return (taskDefs.elements());
 }
 private void readTasks(InputStreamReader taskS) {
   try {
     BufferedReader reader = new BufferedReader(taskS);
     String taskLine;
     while ((taskLine = reader.readLine()) != null) {
       addTaskDefinition(taskLine);
     }
   } catch (IOException ioX) {
     System.err.println("Failed to fully parse task file: " + ioX);
   }
 }
 private void addTaskDefinition(String taskLine) {
   StringTokenizer taskTok = new StringTokenizer(taskLine, DELIM);
   if (taskTok.countTokens() != TOKEN_NUM) {
     System.err.println("Invalid task definition: " + taskLine);
     return;
   }
   Class taskClass = null;
   String taskClassName = taskTok.nextToken();
   try {
     taskClass = Class.forName(taskClassName);
   } catch (ClassNotFoundException cnfX) {
     System.err.println("Class "" + taskClassName + "" not found: "
         + cnfX);
     return;
   }
   boolean taskEnabled = false;
   if (taskTok.nextToken().equalsIgnoreCase("enabled")) {
     taskEnabled = true;
   }
   String taskName = taskTok.nextToken();
   TaskDefinition def = new TaskDefinition(taskName, taskClass,
       taskEnabled);
   taskDefs.add(def);
 }
 private Vector taskDefs = new Vector();
 final static int TOKEN_NUM = 3;
 final static String DELIM = ":";

} class TaskDefinition {

 public TaskDefinition(String name, Class delegate, boolean enabled) {
   this.name = name;
   this.delegate = delegate;
   this.enabled = enabled;
 }
 public String getName() {
   return (name);
 }
 public Class getDelegate() {
   return (delegate);
 }
 public boolean isEnabled() {
   return (enabled);
 }
 private String name;
 private Class delegate;
 private boolean enabled;

}

      </source>