📄 jdadmin.java
字号:
package jabadot;import java.util.*;import java.sql.*;import java.awt.*;import java.awt.event.*;import javax.swing.*;import javax.swing.table.*;/** A User Database Administrator program * This does NOT use the UserDB interface as it needs * to be able to do ANYTHING to the database, * to go beyond, and to repair any errors introduced * by bugs in the UserDB code and/or queries. :-) * * If using InstantDB, therefore, you MUST NOT RUN THIS PROGRAM * while users have access to the system, or the database will * get worse instead of better! * * @version $Id: JDAdmin.java,v 1.6 2001/10/12 23:02:16 ian Exp $ */public class JDAdmin extends JFrame { /** the list of users */ protected ArrayList userList = new ArrayList(); /** The database connection */ protected Connection conn; /** A Statement for listing users */ protected PreparedStatement listUsersStatement; /** A Statement for deleting users */ protected PreparedStatement deleteUserStatement; /** A Statement for resetting passwords for forgetful users */ protected PreparedStatement setPasswordStatement; /** The main table */ protected JTable theTable; /** Main program -- driver */ public static void main(String av[]) throws Exception { JDAdmin aFrame = new JDAdmin(); aFrame.populate(); // aFrame.pack(); aFrame.setSize(600,450); aFrame.setVisible(true); } /** Constructor */ public JDAdmin() throws SQLException { super("JabaDotAdmin"); // INIT THE DB // Do this before the GUI, since JDBC does more-delayed // type checking than Swing... String dbDriver = JDConstants.getProperty("jabadot.jabadb.driver"); try { Class.forName(dbDriver); } catch (ClassNotFoundException ex) { JOptionPane.showMessageDialog(this, "JDBC Driver Failure:\n" + ex, "Error", JOptionPane.ERROR_MESSAGE); } conn = DriverManager.getConnection( JDConstants.getProperty("jabadot.jabadb.url")); listUsersStatement = conn.prepareStatement("select * from users"); deleteUserStatement = conn.prepareStatement("delete from users where name = ?"); setPasswordStatement = conn.prepareStatement( "update users SET password = ? where name = ?"); // INIT THE GUI Container cp = getContentPane(); cp.setLayout(new BorderLayout()); cp.add(new JScrollPane(theTable = new JTable(new MyTableModel())), BorderLayout.CENTER); JPanel bp = new JPanel(); JButton x; bp.add(x = new JButton("Delete")); x.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ex) { int r = theTable.getSelectedRow(); if (r == -1) { JOptionPane.showMessageDialog(JDAdmin.this, "Please select a user to delete", "Error", JOptionPane.ERROR_MESSAGE); return; } int i = JOptionPane.showConfirmDialog(JDAdmin.this, "Really delete user?", "Confirm", JOptionPane.YES_NO_OPTION); switch(i) { case 0: try { delete(r); } catch (SQLException e) { JOptionPane.showMessageDialog(JDAdmin.this, "SQL Error:\n" + e, "Error", JOptionPane.ERROR_MESSAGE); } break; case 1: // nothing to do. break; default: System.err.println("showConfirm: unex ret " + i); } } }); bp.add(x = new JButton("List")); x.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ex) { try { populate(); } catch (SQLException e) { JOptionPane.showMessageDialog(JDAdmin.this, "SQL Error:\n" + e, "Error", JOptionPane.ERROR_MESSAGE); } } }); bp.add(x = new JButton("Exit")); x.addActionListener(new ActionListener() { public void actionPerformed(ActionEvent ex) { System.exit(0); } }); cp.add(bp, BorderLayout.SOUTH); } /** Get the current list of users from the database * into the ArrayList, so the display will be up-to-date * after any major change. */ public void populate() throws SQLException { ResultSet rs = listUsersStatement.executeQuery(); userList.clear(); while (rs.next()) { String nick = rs.getString(1); // System.out.println("Adding " + nick); User u = new User(nick, rs.getString(UserDB.PASSWORD), rs.getString(UserDB.FULLNAME), rs.getString(UserDB.EMAIL), rs.getString(UserDB.CITY), rs.getString(UserDB.PROVINCE), rs.getString(UserDB.COUNTRY), rs.getInt(UserDB.PRIVS)); userList.add(u); } rs.close(); theTable.repaint(); } /** Delete the given user, by row number * (row number in the display == index into the ArrayList). * Use a JDBC PreparedStatement; if it succeeds, then also * remove the user object from the ArrayList. */ public void delete(int x) throws SQLException { User u = (User)userList.get(x); String nick = u.getName(); deleteUserStatement.setString(1, nick); int n; switch (n = deleteUserStatement.executeUpdate()) { case 0: // no match! JOptionPane.showMessageDialog(this, "No match for user " + nick, "Error", JOptionPane.ERROR_MESSAGE); break; case 1: // OK JOptionPane.showMessageDialog(this, "User " + nick + " deleted.", "Done", JOptionPane.INFORMATION_MESSAGE); userList.remove(x); break; default: // Ulp! Deleted too many! -- n JOptionPane.showMessageDialog(this, "Oops, we deleted " + n + " users!!", "Error", JOptionPane.ERROR_MESSAGE); } theTable.repaint(); } // class extends TableModel... class MyTableModel extends AbstractTableModel { /** Returns the number of items in the list. */ public int getRowCount() { return userList.size(); } /** Return the width of the table */ public int getColumnCount() { return 8; } /** Get the name of a given column */ public String getColumnName(int i) { switch(i) { case UserDB.NAME-1: return "Nickname"; case UserDB.PASSWORD-1: return "Password"; case UserDB.FULLNAME-1: return "Full Name"; case UserDB.EMAIL-1: return "Email"; case UserDB.CITY-1: return "City"; case UserDB.PROVINCE-1: return "Province"; case UserDB.COUNTRY-1: return "Country"; case UserDB.PRIVS-1: return "Privs"; default: return "??"; } } /** Returns a data value for the cell at columnIndex and rowIndex. * MUST BE IN SAME ORDER as setValueAt(); */ public Object getValueAt(int row, int col) { User u = (User) userList.get(row); switch (col) { case UserDB.NAME-1: return u.getName(); case UserDB.PASSWORD-1: return u.getPassword(); case UserDB.FULLNAME-1: return u.getFullName(); case UserDB.EMAIL-1: return u.getEmail(); case UserDB.CITY-1: return u.getCity(); case UserDB.PROVINCE-1: return u.getProv(); case UserDB.COUNTRY-1: return u.getCountry(); case UserDB.PRIVS-1: return new Integer(u.getPrivs()); default: return null; } } /** Set a value in a cell. MUSE BE IN SAME ORDER AS getValueAt. */ public void setValueAt(Object val, int row, int col) { User u = (User) userList.get(row); switch (col) { // DB Schemas start at one, Java columns at zero. case UserDB.PASSWORD-1: String newPass = (String)val; // Get new value try { setPasswordStatement.setString(1, newPass); // ready, setPasswordStatement.setString(2, u.getName()); // steady, setPasswordStatement.executeUpdate(); // and update! } catch (SQLException ex) { JOptionPane.showMessageDialog(null, "SQL Error:\n" + ex.toString(), "SQL Error", JOptionPane.ERROR_MESSAGE); break; } u.setPassword(newPass); // bypassed if DB update failed break; // Only password cells are editable. default: JOptionPane.showMessageDialog(null, "setValueAt" + val.getClass() + "," + val, "Logic error", JOptionPane.ERROR_MESSAGE); break; } } /** Only password cells are editable. */ public boolean isCellEditable(int rowIndex, int columnIndex) { return columnIndex == UserDB.PASSWORD-1; } }}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -