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

📄 jdadmin.java

📁 codebook!
💻 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 + -