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;
 }
 }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM