1. 程式人生 > >Java第一個GUI專案-學生資訊查詢-MVC結構

Java第一個GUI專案-學生資訊查詢-MVC結構

M部分:

package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.table.*; import jdbcUtil.SqlHelper; //把對學生表的各種操作封裝到一個模型中
@SuppressWarnings("serial")
public class Model extends AbstractTableModel{     //rowData用來存放行資料   //columnNames用來存放列名   @SuppressWarnings("rawtypes")
  Vector rowData,columnNames;  
  //定義操作資料庫需要的東西   PreparedStatement ps=null;   Connection ct=null;   ResultSet rs=null;   String url="jdbc:mysql://localhost:3306/test?useSSL=true&characterEncoding=utf-8";   String user="root";   String passwd="";   String driver="com.mysql.jdbc.Driver";      //新增學生(增,刪,改)   public boolean updStu(String sql,String []paras)   {    //建立sqlHelper(如果程式併發性不考慮,可以把sqlHelper做成static)    SqlHelper sqlHelper = new SqlHelper();    return sqlHelper.updExecute(sql, paras);   }      //查詢的本質就是初始化   @SuppressWarnings({ "rawtypes", "unchecked" })
  public void queryStu(String sql,String []paras)   {    SqlHelper sqlHelper =null;        //中間    columnNames=new Vector();    //設定列名    columnNames.add("學號");    columnNames.add("名字");    columnNames.add("性別");    columnNames.add("年齡");    columnNames.add("籍貫");    columnNames.add("系別");    rowData=new Vector();    try{     sqlHelper = new SqlHelper();     ResultSet rs=sqlHelper.queryExecute(sql, paras);     while(rs.next())     {
     Vector hang=new Vector();      hang.add(rs.getString(1));      hang.add(rs.getString(2));      hang.add(rs.getString(3));      hang.add(rs.getInt(4));      hang.add(rs.getString(5));      hang.add(rs.getString(6));
     //加入到rowData      rowData.add(hang);
    }
   }catch(Exception e){     e.printStackTrace();    }finally{     sqlHelper.close();    }   }  //得到共有多少行  public int getRowCount() {
  return this.rowData.size();
 }
   //得到共有多少列  public int getColumnCount() {
  return this.columnNames.size();
 }  //得到某行某列的資料  @SuppressWarnings("rawtypes")  public Object getValueAt(int row, int column) {
  return ((Vector)this.rowData.get(row)).get(column);
 }
 @Override  public String getColumnName(int column) {
  return (String)this.columnNames.get(column);
 }
}   V部分:
  主視窗:   package model;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.util.Vector;
import javax.swing.table.*; import jdbcUtil.SqlHelper; //把對學生表的各種操作封裝到一個模型中
@SuppressWarnings("serial")
public class Model extends AbstractTableModel{     //rowData用來存放行資料   //columnNames用來存放列名   @SuppressWarnings("rawtypes")
  Vector rowData,columnNames;  
  //定義操作資料庫需要的東西   PreparedStatement ps=null;   Connection ct=null;   ResultSet rs=null;   String url="jdbc:mysql://localhost:3306/test?useSSL=true&characterEncoding=utf-8";   String user="root";   String passwd="";   String driver="com.mysql.jdbc.Driver";      //新增學生(增,刪,改)   public boolean updStu(String sql,String []paras)   {    //建立sqlHelper(如果程式併發性不考慮,可以把sqlHelper做成static)    SqlHelper sqlHelper = new SqlHelper();    return sqlHelper.updExecute(sql, paras);   }      //查詢的本質就是初始化   @SuppressWarnings({ "rawtypes", "unchecked" })
  public void queryStu(String sql,String []paras)   {    SqlHelper sqlHelper =null;        //中間    columnNames=new Vector();    //設定列名    columnNames.add("學號");    columnNames.add("名字");    columnNames.add("性別");    columnNames.add("年齡");    columnNames.add("籍貫");    columnNames.add("系別");    rowData=new Vector();    try{     sqlHelper = new SqlHelper();     ResultSet rs=sqlHelper.queryExecute(sql, paras);     while(rs.next())     {
     Vector hang=new Vector();      hang.add(rs.getString(1));      hang.add(rs.getString(2));      hang.add(rs.getString(3));      hang.add(rs.getInt(4));      hang.add(rs.getString(5));      hang.add(rs.getString(6));
     //加入到rowData      rowData.add(hang);
    }
   }catch(Exception e){     e.printStackTrace();    }finally{     sqlHelper.close();    }   }  //得到共有多少行  public int getRowCount() {
  return this.rowData.size();
 }
   //得到共有多少列  public int getColumnCount() {
  return this.columnNames.size();
 }  //得到某行某列的資料  @SuppressWarnings("rawtypes")  public Object getValueAt(int row, int column) {
  return ((Vector)this.rowData.get(row)).get(column);
 }
 @Override  public String getColumnName(int column) {
  return (String)this.columnNames.get(column);
 }
}   對話方塊:
     //當我們點選一個”新增“按鈕時,彈出一個新增學生對話方塊 package dialog;
import javax.swing.*; import model.Model; import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;   @SuppressWarnings("serial")
public class StuAddDialog extends JDialog implements ActionListener{    //定義我需要的swing元件  JLabel jl1,jl2,jl3,jl4,jl5,jl6;  JButton jb1,jb2;  JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;  JPanel jp1,jp2,jp3;    //owner它的父視窗  //title 視窗名  //modal 指定是模態視窗,還是非模態視窗  public StuAddDialog(Frame owner,String title ,boolean modal)  {   super(owner,title,modal);//呼叫父類構造方法,達到模式對話方塊效果      jp1=new JPanel();   jp2=new JPanel();   jp3=new JPanel();      jl1=new JLabel("學號");   jl2=new JLabel("姓名");   jl3=new JLabel("性別");   jl4=new JLabel("年齡");   jl5=new JLabel("籍貫");   jl6=new JLabel("系別");      jtf1=new JTextField();   jtf2=new JTextField();   jtf3=new JTextField();   jtf4=new JTextField();   jtf5=new JTextField();   jtf6=new JTextField();      jb1=new JButton("新增");   //註冊監聽   jb1.addActionListener(this);   jb2=new JButton("取消");   jb2.addActionListener(this);   //設定佈局   jp1.setLayout(new GridLayout(6,1));   jp2.setLayout(new GridLayout(6,1));      //新增元件   jp1.add(jl1);   jp1.add(jl2);   jp1.add(jl3);   jp1.add(jl4);   jp1.add(jl5);   jp1.add(jl6);      jp2.add(jtf1);   jp2.add(jtf2);   jp2.add(jtf3);   jp2.add(jtf4);   jp2.add(jtf5);   jp2.add(jtf6);      jp3.add(jb1);   jp3.add(jb2);      this.add(jp1,BorderLayout.WEST);   this.add(jp2,BorderLayout.CENTER);   this.add(jp3,BorderLayout.SOUTH);         //展現   this.setSize(300,250);   this.setVisible(true);  }    @Override  public void actionPerformed(ActionEvent e) {   // TODO Auto-generated method stub   if(e.getSource()==jb1)   {    //希望新增    Model temp=new Model();    String sql="insert into stu values(?,?,?,?,?,?)";    String []paras={jtf1.getText(),jtf2.getText(),jtf3.getText(),jtf4.getText(),jtf5.getText(),jtf6.getText()};    if(!temp.updStu(sql, paras))    {     //提示     JOptionPane.showMessageDialog(this, "新增失敗");         }    //關閉對話方塊    this.dispose();   }   else if(e.getSource()==jb2) {
   this.dispose();
  }     }     }      //負責對學生的資訊進行更新的類
package dialog;
import javax.swing.*; import model.Model; import java.awt.*;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
@SuppressWarnings("serial")
public class StuupdDialog extends JDialog implements ActionListener{    //定義我需要的swing元件  JLabel jl1,jl2,jl3,jl4,jl5,jl6;  JButton jb1,jb2;  JTextField jtf1,jtf2,jtf3,jtf4,jtf5,jtf6;  JPanel jp1,jp2,jp3;    //owner它的父視窗  //title 視窗名  //modal 指定是模態視窗,還是非模態視窗  public StuupdDialog(Frame owner,String title ,boolean modal,Model sm,int rowNums)  {   super(owner,title,modal);//呼叫父類構造方法,達到模式對話方塊效果  
  jp1=new JPanel();   jp2=new JPanel();   jp3=new JPanel();      jl1=new JLabel("學號");   jl2=new JLabel("姓名");   jl3=new JLabel("性別");   jl4=new JLabel("年齡");   jl5=new JLabel("籍貫");   jl6=new JLabel("系別");      jtf1=new JTextField();   //初始化資料   jtf1.setText((String)sm.getValueAt(rowNums, 0));   //讓jtf1不能修改   jtf1.setEditable(false);   jtf2=new JTextField();   jtf2.setText((String)sm.getValueAt(rowNums, 1));   jtf3=new JTextField();   jtf3.setText((String)sm.getValueAt(rowNums, 2));   jtf4=new JTextField();   jtf4.setText((String)sm.getValueAt(rowNums, 3).toString());   jtf5=new JTextField();   jtf5.setText((String)sm.getValueAt(rowNums, 4));   jtf6=new JTextField();   jtf6.setText((String)sm.getValueAt(rowNums, 5));      jb1=new JButton("修改");   //註冊監聽   jb1.addActionListener(this);   jb2=new JButton("取消");
  
  jb2.addActionListener(this);      //設定佈局   jp1.setLayout(new GridLayout(6,1));   jp2.setLayout(new GridLayout(6,1));      //新增元件   jp1.add(jl1);   jp1.add(jl2);   jp1.add(jl3);   jp1.add(jl4);   jp1.add(jl5);   jp1.add(jl6);      jp2.add(jtf1);   jp2.add(jtf2);   jp2.add(jtf3);   jp2.add(jtf4);   jp2.add(jtf5);   jp2.add(jtf6);      jp3.add(jb1);   jp3.add(jb2);      this.add(jp1,BorderLayout.WEST);   this.add(jp2,BorderLayout.CENTER);   this.add(jp3,BorderLayout.SOUTH);         //展現   this.setSize(300,250);   this.setVisible(true);  }    @Override  public void actionPerformed(ActionEvent e) {   // TODO Auto-generated method stub   if(e.getSource()==jb1)   {    //對使用者點選新增按鈕後的響應動作    //做一個sql    //預編譯語句物件    String str="update stu set stuName=?,stuSex=?," +      "stuAge=?,stuJg=?,stuDept=? where stuId=?";    String []paras={jtf2.getText(),jtf3.getText(),jtf4.getText(),jtf5.getText(),jtf6.getText(),jtf1.getText()};    Model temp=new Model();    temp.updStu(str, paras);    this.dispose();   }   else if(e.getSource()==jb2) {
   this.dispose();
  }     }     }   C部分: package jdbcUtil;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet; //用於對資料庫進行操作的類
public class SqlHelper {  //定義操作資料庫需要的東西  PreparedStatement ps=null;
 Connection ct=null;
 ResultSet rs=null;
 String url="jdbc:mysql://localhost:3306/test?useSSL=true&characterEncoding=utf-8";  String user="root";  String passwd="";  String driver="com.mysql.jdbc.Driver";    //關閉資料庫資源  public void close()
 {
  //關閉
  try{
   if(rs!=null) rs.close();
   if(ps!=null) ps.close();
   if(ct!=null) ct.close();
  }catch(Exception e){
   e.printStackTrace();
  }  }  //寫了一個不需要注入的方法
 public ResultSet queryExcecute(String sql)
 {
  try{
   //1.載入驅動
   Class.forName(driver);
   
   //2.得到連線
   ct=DriverManager.getConnection(url,user,passwd);
   
   //3.建立ps
   ps=ct.prepareStatement(sql);
   rs=ps.executeQuery();
 }catch(Exception e){   e.printStackTrace();  }finally{
  //關閉資源
 }  return rs;  }    //查詢資料庫的操作  public ResultSet queryExecute(String sql,String []paras)  {    try{     //1.載入驅動     Class.forName(driver);     //2.得到連線     ct=DriverManager.getConnection(url,user,passwd);     //3.建立ps     ps=ct.prepareStatement(sql);     //給ps的?賦值     for(int i=0;i<paras.length;i++)     {      ps.setString(i+1, paras[i]);     }
    rs=ps.executeQuery();   }catch(Exception e){    e.printStackTrace();   }finally{
   //關閉資源
  }   return rs;  }    //把增刪改合在一起  public boolean updExecute(String sql,String []paras)  {
  boolean b=true;
  try{    //1.載入驅動    Class.forName(driver);    //2.得到連線    ct=DriverManager.getConnection(url,user,passwd);    //3.建立ps    ps=ct.prepareStatement(sql);    //給ps的?賦值    for(int i=0;i<paras.length;i++)    {
    ps.setString(i+1, paras[i]);
   }    //4.執行操作    if(ps.executeUpdate()!=1)    {
    b=false;
   }
  }catch(Exception e){    b=false;
   e.printStackTrace();   }finally{
   this.close();
  }
  return b;
 }  }