數據庫的內容:
GUI界面:
代碼:StudentManagerment.java
package 學生基本信息;
import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import javax.swing.*;
import java.sql.*;
public class StudentManagement extends JFrame implements ActionListener{
JTabbedPane dbTabPane;
JPanel inputPanel; //錄入面板
JPanel viewPanel; //瀏覽面板
JPanel updatePanel; //更新面板
JPanel deletePanel; //刪除面板
JButton inputBtn; //錄入
JButton clearBtn1;
StudentPanel inputInnerPanel;
JTextArea viewArea; //瀏覽
JButton viewBtn;
StudentPanel updateInnerPanel; //修改數據
JLabel updateInputLbl;
JTextField updateInputText;
JButton updateBtn;
StudentPanel deleteInnerPanel;
JLabel inputNoLabel;
JTextField inputNoField;
JButton deleteBtn;
Connection conn;
Statement stmt;
public StudentManagement(){
super("學生基本信息管理系統");
serGUIComponent();
}
public void serGUIComponent() {
// TODO Auto-generated method stub
Container c = getContentPane();
c.setLayout(new BorderLayout());
dbTabPane = new JTabbedPane();
//定義錄入面板
inputPanel = new JPanel();
inputPanel.setLayout(new FlowLayout());
inputBtn = new JButton("錄入");
clearBtn1 = new JButton("清除");
/*使用this對象,可以不用聲明內部類而直接在本類中實現接口覆蓋接口的方法。*/
inputBtn.addActionListener(this);
clearBtn1.addActionListener(this);
inputInnerPanel = new StudentPanel();
inputPanel.add(inputInnerPanel);
inputPanel.add(inputBtn);
inputPanel.add(clearBtn1);
dbTabPane.add("錄入數據", inputPanel);
//定義瀏覽面板
viewPanel = new JPanel();
viewPanel.setLayout(new BorderLayout());
viewArea = new JTextArea(6,35);
viewBtn = new JButton("瀏覽");
viewPanel.add(new JScrollPane(viewArea), BorderLayout.CENTER);
viewPanel.add(viewBtn,BorderLayout.SOUTH);
viewBtn.addActionListener(this);
dbTabPane.addTab("瀏覽數據", viewPanel);
//定義更新面板
updateInnerPanel = new StudentPanel();
updateInputLbl = new JLabel("輸入學號:");
updateInputText = new JTextField(10);
updateInputText.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//將更新面板的顯示內容清除
viewARecord(updateInputText.getText(),updateInnerPanel);
updateInputText.setText("");
}
});
updateBtn = new JButton("修改");
updateBtn.addActionListener(this);
updatePanel = new JPanel();
updatePanel.add(updateInnerPanel);
updatePanel.add(updateInputLbl);
updatePanel.add(updateInputText);
updatePanel.add(updateBtn);
dbTabPane.add("修改數據", updatePanel);
//定義刪除面板
deleteInnerPanel = new StudentPanel();
inputNoLabel = new JLabel("輸入學號:");
inputNoField = new JTextField(10);
inputNoField.addActionListener(new ActionListener(){
public void actionPerformed(ActionEvent e){
//將刪除面板的顯示內容清除
viewARecord(inputNoField.getText(),deleteInnerPanel);
inputNoField.setText("");
}
});
deleteBtn = new JButton("刪除");
deleteBtn.addActionListener(this);
deletePanel = new JPanel();
deletePanel.add(deleteInnerPanel);
deletePanel.add(inputNoLabel);
deletePanel.add(inputNoField);
deletePanel.add(deleteBtn);
dbTabPane.add("刪除數據", deletePanel);
c.add(BorderLayout.NORTH,dbTabPane);
}
public void connection(){ //建立連接數據庫
try{
Class.forName("com.hxtt.sql.access.AccessDriver"); //JDBC-ODBC橋接器
System.out.println("驅動已加載");
conn = DriverManager.getConnection("jdbc:Access:///E:/java程序設計/java數據庫編程/Access2/student.mdb","","");
stmt = conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, ResultSet.CONCUR_UPDATABLE);
}catch(ClassNotFoundException e1){
e1.printStackTrace();
}catch(SQLException e2){
e2.getSQLState();
e2.getMessage();
}
}
public void close(){ //關閉執行語句和數據庫
try{
if(stmt != null)
stmt.close();
if(conn != null)
conn.close();
}catch(SQLException e2){
System.out.println("不能正常關閉");
}
}
public void inputRecords(){ //錄入學生數據
String no = inputInnerPanel.getNo();
String name = inputInnerPanel.getName();
String gender = inputInnerPanel.getGender();
String birth = inputInnerPanel.getBirth();
String address = inputInnerPanel.getAddress();
String tel = inputInnerPanel.getTel();
try{
connection();
String InsSQL;
InsSQL = "INSERT INTO student(學號,姓名,性別,出生年月,家庭住址,聯繫電話)"+"VALUES("+"'"+no+"',"+"'"+name+"',"+"'"+gender+"',"+"'"+birth+"',"+"'"+address+"',"+"'"+tel+"')";
stmt.execute(InsSQL);
JOptionPane.showMessageDialog(null, "插入成功");
}catch(SQLException e){
e.printStackTrace();
}finally{
close();
}
}
public void viewARecord(String no, StudentPanel p){
try{
connection();
String viewSQL = "SELECT * From student where 學號='"+no+"'";
ResultSet rs = stmt.executeQuery(viewSQL);
if(rs.next()){
p.setNo(rs.getString("學號"));
p.setName(rs.getString("姓名"));
p.setGender(rs.getString("性別"));
p.setBirth(rs.getString("出生年月"));
p.setAddress(rs.getString("家庭住址"));
p.setTel(rs.getString("聯繫電話"));
}
}catch(SQLException e){
System.out.println("瀏覽學生記錄失敗");
e.printStackTrace();
}finally{
close();
}
}
public void viewRecords(){
try{
viewArea.setText("");
String viewString = "";
connection();
ResultSet rs = stmt.executeQuery("SELECT * From student");
ResultSetMetaData rsMeta = rs.getMetaData();
int nums = rsMeta.getColumnCount();
//獲得字段名稱
for(int i = 1; i <= nums; i++){
viewString+=rsMeta.getColumnName(i) + "\t";
}
viewString += "\n";
//獲得數據表student的記錄
while(rs.next()){
for(int i = 1; i <= nums; i++){
viewString += rs.getString(i) + "\t";
}
viewString += "\n";
viewArea.setText(viewString);
}
rs.close();
}catch(SQLException e){
System.out.println("瀏覽學生記錄失敗");
e.printStackTrace();
}finally{
close();
}
}
public void updateRecord(String no){ //修改學號爲no學生的記錄
String updateSQL = "update student set 姓名 =?,"+"性別=?,"+"出生年月=?,"+"家庭住址=?,"+"聯繫電話=?"+""+"where 學號='"+no+"'";
PreparedStatement stmt;
try{
connection();
stmt = conn.prepareStatement(updateSQL);
stmt.setString(1, updateInnerPanel.getName());
stmt.setString(2, updateInnerPanel.getGender());
stmt.setString(3, updateInnerPanel.getBirth());
stmt.setString(4, updateInnerPanel.getAddress());
stmt.setString(5, updateInnerPanel.getTel());
stmt.execute();
stmt.close();
JOptionPane.showMessageDialog(null, "修改數據成功");
}catch(SQLException e){
e.printStackTrace();
}finally{
close();
}
}
public void deleteRecord(String no){
String delStr = "delete from student where 學號='"+no+"'";
try{
connection();
stmt.execute(delStr);
JOptionPane.showMessageDialog(null, "刪除成功");
}catch(SQLException e){
System.err.println("刪除失敗");
e.printStackTrace();
}finally{
close();
}
}
public static void main(String[] args) {
// TODO Auto-generated method stub
StudentManagement app = new StudentManagement();
app.setSize(500,260);
app.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
app.setVisible(true);
}
@Override
public void actionPerformed(ActionEvent e) {
// TODO Auto-generated method stub
if(e.getSource() == inputBtn){
inputRecords();
}else if(e.getSource() == viewBtn){
viewRecords();
}else if(e.getSource() == updateBtn){
updateRecord(updateInnerPanel.getNo());
}else if(e.getSource() == deleteBtn){
deleteRecord(deleteInnerPanel.getNo());
deleteInnerPanel.clearContent();
}else if(e.getSource() == clearBtn1){
inputInnerPanel.clearContent();
}
}
}
StudentPanel.java
package 學生基本信息;
/**
* 功能簡介:實現"錄入","修改","瀏覽","刪除"學生基本信息的面板
*/
import java.awt.*;
import javax.swing.*;
public class StudentPanel extends JPanel{
JLabel nolabel; //學號標籤
JLabel namelabel; //姓名標籤
JLabel genderlabel; //性別標籤
JLabel birthlabel; //出生年月標籤
JLabel addresslabel; //家庭住址標籤
JLabel tellabel; //電話標籤
JTextField nofield; //學號輸入框
JTextField namefield; //姓名輸入框
JTextField genderfield; //性別輸入框
JTextField birthfield; //出生年月輸入框
JTextField addressfield;//家庭住址輸入框
JTextField telfield; //電話輸入框
public StudentPanel(){
setGUIComponent();
}
public void setGUIComponent() {
// TODO Auto-generated method stub
//初始化組件
nolabel = new JLabel("學號");
nofield = new JTextField(10);
namelabel = new JLabel("姓名");
namefield = new JTextField(10);
genderlabel = new JLabel("性別");
genderfield = new JTextField(10);
birthlabel = new JLabel("出生年月");
birthfield = new JTextField(10);
addresslabel = new JLabel("家庭住址");
addressfield = new JTextField(10);
tellabel = new JLabel("聯繫電話");
telfield = new JTextField(10);
//設置組件
this.setLayout(new GridLayout(3,4));
this.add(nolabel);
this.add(nofield);
this.add(namelabel);
this.add(namefield);
this.add(genderlabel);
this.add(genderfield);
this.add(birthlabel);
this.add(birthfield);
this.add(addresslabel);
this.add(addressfield);
this.add(tellabel);
this.add(telfield);
this.setVisible(true);
this.setSize(300,300);
}
//清楚文本框的內容
public void clearContent(){
nofield.setText("");
namefield.setText("");
genderfield.setText("");
birthfield.setText("");
addressfield.setText("");
telfield.setText("");
}
//輸入
public void setNo(String n){
nofield.setText(n);
}
public void setName(String n){
namefield.setText(n);
}
public void setGender(String n){
genderfield.setText(n);
}
public void setBirth(String n){
birthfield.setText(n);
}
public void setAddress(String n){
addressfield.setText(n);
}
public void setTel(String n){
telfield.setText(n);
}
//得到文本框內容
public String getNo(){
return nofield.getText();
}
public String getName(){
return namefield.getText();
}
public String getGender(){
return genderfield.getText();
}
public String getBirth(){
return birthfield.getText();
}
public String getAddress(){
return addressfield.getText();
}
public String getTel(){
return telfield.getText();
}
}
由於只是自己做着玩,所以使用access數據庫。