这次的实验差点忘记贴了上来
主要是数据库这边要连接好
怎么连接:
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);
}
}
}