这次的实验差点忘记贴了上来
主要是数据库这边要连接好
怎么连接:
http://blog.csdn.net/xihuanqiqi/article/details/6728641
怎么操作:
http://blog.csdn.net/xihuanqiqi/article/details/6728716
数据库外,没一点难度,事实上,数据库也不难。
/* * For java 5 * Made a database manage system */ import java.awt.BorderLayout; import java.awt.Choice; import java.awt.Container; import java.awt.Dimension; import java.awt.GridBagConstraints; import java.awt.GridBagLayout; import java.awt.Image; import java.awt.Toolkit; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.awt.event.ItemEvent; import java.awt.event.ItemListener; import java.awt.event.KeyEvent; import java.awt.event.KeyListener; import java.io.IOException; import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.regex.Pattern; import javax.swing.ButtonGroup; import javax.swing.ImageIcon; 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.JRadioButton; import javax.swing.JScrollPane; import javax.swing.JTable; import javax.swing.JTextField; import javax.swing.JToolBar; public class MyDataBase { public static void main(String args[]) throws ClassNotFoundException, SQLException { new LoginFrame(); //new DataBaseFrame(); } } class DataBaseFrame extends JFrame implements ActionListener { private static final long serialVersionUID = 1L; private JMenuBar menuBar; private JMenu menu; private JMenuItem addStdItem; private JMenuItem exitItem; private JToolBar toolBar; private JTable table; private JButton addStdButton; private JButton exitButton; private int height, width; private JPanel panel; private ImageIcon icon1, icon2; private JScrollPane scrollPane; private Object[][] cellData; public JTable getTable(){ return table; } public DataBaseFrame() throws ClassNotFoundException, SQLException { super("学生数据库管理系统"); panel = new JPanel(); panel.setLayout(null); this.add(panel); initHeightAndWidth(); initMenuBar(); initToolBar(); reflashTableData(); this.setSize(width, height); this.setVisible(true); this.setDefaultCloseOperation(EXIT_ON_CLOSE); } public void initHeightAndWidth() { Toolkit tk = Toolkit.getDefaultToolkit(); Dimension screenSize = tk.getScreenSize(); height = screenSize.height; width = screenSize.width; } public void initMenuBar() { menuBar = new JMenuBar(); menu = new JMenu("学生管理"); addStdItem = new JMenuItem("增加学生"); exitItem = new JMenuItem("退出"); addStdItem.addActionListener(this); exitItem.addActionListener(this); menu.add(addStdItem); menu.add(exitItem); menuBar.add(menu); setJMenuBar(menuBar); } public void initToolBar() { toolBar = new JToolBar(); addStdButton = new JButton(); exitButton = new JButton(); String root = System.getProperty("user.dir").replace('\\', '/'); icon1 = new ImageIcon(root + "/1.jpg"); icon2 = new ImageIcon(root + "/2.jpg"); icon1.setImage(icon1.getImage().getScaledInstance(100, 100, Image.SCALE_DEFAULT)); icon2.setImage(icon2.getImage().getScaledInstance(100, 100, Image.SCALE_DEFAULT)); addStdButton.setSize(100, 100); exitButton.setSize(100, 100); addStdButton.setIcon(icon1); exitButton.setIcon(icon2); addStdButton.addActionListener(this); exitButton.addActionListener(this); toolBar.add(addStdButton); toolBar.add(exitButton); panel.add(toolBar); toolBar.setBounds(0, 0, width, 100); } public void reFlashTable() { String[] columnNames = { "学号", "姓名", "性别", "年龄", "生日", "学院" }; table = new JTable(cellData, columnNames); table.setBounds(0, 0, 450, 450); scrollPane = new JScrollPane(table); scrollPane.setBounds(0, 100, width, height - 100); panel.add(scrollPane); } public void reflashTableData() throws SQLException, ClassNotFoundException { Class.forName("com.mysql.jdbc.Driver");// 装载驱动Driver String DBUser = "root";// 自己数据库的用户名 String DBPassword = "root";// 自己数据库的密码 String url = "jdbc:mysql://127.0.0.1:3306/hit"; Connection conn = null; try { conn = DriverManager.getConnection(url, DBUser, DBPassword); } catch (SQLException e) { e.printStackTrace(); }// 连接数据库 Statement sm = conn.createStatement(); String sql = "select * from student"; ResultSet rs = sm.executeQuery(sql); //炮哥的想法是在是太厲害了!!先是跑的最後知道了row //然後就能定義那個cellData了!厲害! //tabel太噁心了,構造函數總是要什麽object,不過這個方法 //應該能應付大部份的情況了,學習啦. rs.last(); cellData = new Object[rs.getRow()][6]; System.out.println(rs.getRow()); rs.beforeFirst(); int i = 0; while (rs.next()) { for (int j = 0; j < 6; j++) { cellData[i][j] = rs.getObject(j + 1); } i++; } reFlashTable(); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource()==addStdItem || e.getSource() == addStdButton){ new addStd(); } if(e.getSource()==exitItem ||e.getSource() == exitButton){ int returnVal = JOptionPane.showConfirmDialog(null, "确定离开", "choose one", JOptionPane.YES_NO_OPTION); if(returnVal == JOptionPane.YES_OPTION){ this.dispose(); System.exit(0); } } } class addStd extends JFrame implements ActionListener, ItemListener{ private JLabel numLabel; private JTextField numField; private JLabel nameLabel; private JTextField nameField; private JLabel sexLabel; private JRadioButton maleRButton,femaleRButton; private JLabel ageLabel; private JTextField ageField; private JLabel birthdayLabel; private JLabel yearLabel,mouthLabel,dayLabel; private Choice yearChoice,mouthChoice,dayChoice; private JLabel collegeLabel; private Choice collegeChoice; private JButton addDataButton,exitButton; private ButtonGroup group; GridBagLayout bag = new GridBagLayout(); GridBagConstraints c = new GridBagConstraints(); String number; String name; String sex="M"; int age; String birthday; String college; public addStd(){ super("學生信息"); init(); this.setSize(400,400); this.setLocation(400,200); this.setVisible(true); //this.setDefaultCloseOperation(EXIT_ON_CLOSE); } public void init(){ JPanel panel=new JPanel(); this.add(panel); numLabel=new JLabel("學號:"); numField=new JTextField(100); nameLabel=new JLabel("姓名:"); nameField=new JTextField(100); sexLabel=new JLabel("姓名:"); maleRButton=new JRadioButton("男",true); femaleRButton=new JRadioButton("女"); group=new ButtonGroup(); group.add(femaleRButton); group.add(maleRButton); ageLabel=new JLabel("年齡:"); ageField=new JTextField(100); ageField.setEditable(false); birthdayLabel=new JLabel("生日:"); yearChoice=new Choice(); for(int i=1900;i<2012;i++) yearChoice.addItem(String.valueOf(i)); mouthChoice=new Choice(); for(int i=1;i<13;i++) mouthChoice.addItem(String.valueOf(i)); dayChoice=new Choice(); for(int i=1;i<32;i++) dayChoice.addItem(String.valueOf(i)); yearChoice.addItemListener(this); yearLabel=new JLabel("年"); mouthLabel=new JLabel("月"); dayLabel=new JLabel("日"); collegeLabel= new JLabel("學院:"); collegeChoice=new Choice(); addDataButton=new JButton("錄入數據"); addDataButton.setEnabled(false); exitButton=new JButton("離開"); collegeChoice.addItem("Hang tian"); collegeChoice.addItem("Software"); panel.setLayout(bag); c.fill=2; setCons(1,0,1,1); panel.add(numLabel,c); setCons(2,0,2,1); panel.add(numField,c); setCons(1,1,1,1); panel.add(nameLabel,c); setCons(2,1,1,1); panel.add(nameField,c); setCons(1,2,1,1); panel.add(sexLabel,c); setCons(2,2,1,1); panel.add(maleRButton,c); setCons(3,2,1,1); panel.add(femaleRButton,c); setCons(1,3,1,1); panel.add(ageLabel,c); setCons(2,3,1,1); panel.add(ageField,c); setCons(1,4,1,1); panel.add(birthdayLabel,c); setCons(2,4,1,1); panel.add(yearChoice,c); setCons(3,4,1,1); panel.add(yearLabel,c); setCons(4,4,1,1); panel.add(mouthChoice,c); setCons(5,4,1,1); panel.add(mouthLabel,c); setCons(6,4,1,1); panel.add(dayChoice,c); setCons(7,4,1,1); panel.add(dayLabel,c); setCons(1,5,1,1); panel.add(collegeLabel,c); setCons(2,5,1,1); panel.add(collegeChoice,c); setCons(2,6,1,1); panel.add(addDataButton,c); setCons(4,6,1,1); panel.add(exitButton,c); addListener(); numField.addKeyListener(new NumberFieldKeyListener()); nameField.addKeyListener(new NameFieldKeyListener()); } /* 子类NumberFieldKeyListener是用来监听JTextField的 */ class NumberFieldKeyListener implements KeyListener { public void keyTyped(KeyEvent e) { Object o = e.getSource(); if (o instanceof JTextField) { char keyCh = e.getKeyChar(); Pattern pat = Pattern.compile("[0-9]"); if (!pat.matcher(String.valueOf(keyCh)).matches()) { if (keyCh != ' ') // 回车字符 e.setKeyChar('\0'); } } } public void keyPressed(KeyEvent arg0) {} public void keyReleased(KeyEvent arg0) { String tempNumber = numField.getText(); String tempName =nameField.getText(); if (tempNumber.length() != 0 && !tempName.equals("")) { addDataButton.setEnabled(true); } } } /* 子类NameFieldKeyListener是用来监听JTextField的 */ class NameFieldKeyListener implements KeyListener { public void keyTyped(KeyEvent e) { Object o = e.getSource(); if (o instanceof JTextField) { char keyCh = e.getKeyChar(); Pattern pat = Pattern.compile("[a-z]"); if (!pat.matcher(String.valueOf(keyCh)).matches()) { if (keyCh != ' ') // 回车字符 e.setKeyChar('\0'); } } } public void keyPressed(KeyEvent arg0) {} public void keyReleased(KeyEvent arg0) { String tempNumber = numField.getText(); String tempName =nameField.getText(); if (tempNumber.length() != 0 && !tempName.equals("")) { addDataButton.setEnabled(true); } } } public void addListener(){ addDataButton.addActionListener(this); exitButton.addActionListener(this); maleRButton.addActionListener(this); femaleRButton.addActionListener(this); } public void setCons(int x,int y,int width,int height){ c.weightx=1; c.weighty=1; c.gridx=x; c.gridy=y; c.gridheight=height; c.gridwidth=width; } public void getMsg(){ number=numField.getText(); name=nameField.getText(); if(!number.equals("") && !name.equals("")){ addDataButton.setEnabled(true); } //sex不在這裡取得 //age这里遇到了小麻烦当我这么写的时候: if(ageField.getText() != null) {即使它是null也被认为不是null} //看来得这么写才行啊,这问题明天好好整整 String year=yearChoice.getSelectedItem(); String mouth=mouthChoice.getSelectedItem(); String day=dayChoice.getSelectedItem(); //怎么得到系统的时间?并且解析出本年份??? age = 2011-Integer.valueOf(year); ageField.setText(String.valueOf(age)); birthday=year+"-"+mouth+"-"+day; college=collegeChoice.getSelectedItem(); } @Override public void actionPerformed(ActionEvent e) { if(e.getSource() == maleRButton){ sex="M"; } if(e.getSource()==femaleRButton){ sex="F"; } if(e.getSource() == addDataButton){ try { Class.forName("com.mysql.jdbc.Driver"); String DBUser = "root";// 自己数据库的用户名 String DBPassword = "root";// 自己数据库的密码 String url = "jdbc:mysql://127.0.0.1:3306/hit"; Connection conn = null; try { conn = DriverManager.getConnection(url, DBUser, DBPassword); } catch (SQLException e1) { e1.printStackTrace(); }// 连接数据库 Statement sm = conn.createStatement(); getMsg(); String sql="insert into student values("+"\""+number+"\","+"\""+name+"\","+"\""+sex+"\"," +age+","+"\""+birthday+"\","+"\""+college+"\""+");"; sm.executeUpdate (sql); reflashTableData(); sm.close(); conn.close(); } catch (ClassNotFoundException e2) { e2.printStackTrace(); } catch (SQLException e2) { e2.printStackTrace(); } } if(e.getSource() == exitButton){ this.dispose(); } } @Override public void itemStateChanged(ItemEvent e) { // TODO Auto-generated method stub age=2011-Integer.parseInt(yearChoice.getSelectedItem()); ageField.setText(String.valueOf(age)); } } } class LoginFrame extends JFrame implements ActionListener { private JLabel userLabel; private JLabel mmLabel; private JTextField userField; private JPasswordField mmField; private JButton yes, no; private static final long serialVersionUID = 1L; public LoginFrame() { super("欢迎登陆数据库管理系统"); // 调用父类构造函数 init(); setResizable(false); this.setSize(300, 150); this.setLocation(400, 200); this.setVisible(true); } public void init() { JPanel panel = new JPanel(); userLabel = new JLabel("用户名:"); mmLabel = new JLabel("密码:"); userField = new JTextField(50); mmField = new JPasswordField(50); yes = new JButton("登陆"); no = new JButton("退出"); panel.setLayout(null); userLabel.setBounds(30, 10, 50, 20); userField.setBounds(90, 10, 150, 20); mmLabel.setBounds(30, 40, 50, 20); mmField.setBounds(90, 40, 150, 20); yes.setBounds(90, 70, 60, 20); no.setBounds(180, 70, 60, 20); this.getRootPane().setDefaultButton(yes); panel.add(userLabel); panel.add(mmLabel); panel.add(userField); panel.add(mmField); panel.add(yes); panel.add(no); yes.addActionListener(this); no.addActionListener(this); Container container = getContentPane(); // 得到容器 container.add(panel, BorderLayout.CENTER); // 增加组件到容器上 } public void checkUser() throws IOException, SQLException, ClassNotFoundException { String user = userField.getText(); @SuppressWarnings("deprecation") String mm = mmField.getText(); Class.forName("com.mysql.jdbc.Driver");// 装载驱动Driver String DBUser = "root";// 自己数据库的用户名 String DBPassword = "root";// 自己数据库的密码 String url = "jdbc:mysql://127.0.0.1:3306/hit"; Connection conn = null; try { conn = DriverManager.getConnection(url, DBUser, DBPassword); } catch (SQLException e) { e.printStackTrace(); }// 连接数据库 Statement sm = conn.createStatement(); String sql = "select * from admin"; ResultSet rs = sm.executeQuery(sql); boolean found = false; while (rs.next()) { String un = rs.getString("username");// username是我table String pw = rs.getString("password"); if (un.equals(user) && pw.equals(mm)) { found = true; break; } } if (found) { new DataBaseFrame(); this.dispose(); } else { JOptionPane.showMessageDialog(null, "用户名或密码不正确\n请注意大小写!"); userField.setText(null); mmField.setText(null); } } @Override public void actionPerformed(ActionEvent e) { if (e.getSource() == yes) { try { checkUser(); } catch (IOException e1) { e1.printStackTrace(); } catch (SQLException e1) { e1.printStackTrace(); } catch (ClassNotFoundException e2) { e2.printStackTrace(); } } else if (e.getSource() == no) { System.exit(0); } } }