package com.Test1;
/**
 *完成一个迷你版本的学生信息管理系统 */
import java.util.*;
import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
public class StuManage extends JFrame implements ActionListener {
/*ActionListener是swing中的知识,通常是在进行某一个操作的时候触发某项功能。
场景举例:当前有个按钮,通过给按钮增加监听事件,之后进行浏览本地路径,
添加相应的路径名称,之后进行特定的内容操作
。此时如果按钮不增加监听,那么就无法实现打开文件浏览功能。*/
//定义一些控件
JPanel jp1,jp2;
JButton jb1,jb2,jb3,jb4;
JLabel jl1;
JTable jt;
JScrollPane jsp;
JTextField jtf;
Vector rowData, columnName;
StuModel sm;


public static void main(String[] args) {

StuManage test3=new StuManage();

}
public StuManage(){
jp1=new JPanel();
jtf=new JTextField(10);
jb1=new JButton("查询");
jb1.addActionListener(this);
jl1=new JLabel("请输入名字");
//jp1是流布局的
//把各个控件加到jp1
jp1.add(jl1);
jp1.add(jtf);
jp1.add(jb1);
jp2=new JPanel();
jb2=new JButton("添加");
jb2.addActionListener(this);
jb3=new JButton("修改");
jb4=new JButton("删除");
jb4.addActionListener(this);
//把各个按钮加到jp2中
jp2.add(jb2);
jp2.add(jb3);
jp2.add(jb4);

// //中间部分
// columnName=new Vector();
// //设置列名
// columnName.add("学号");
// columnName.add("姓名");
// columnName.add("性别");
// columnName.add("年龄");
// columnName.add("籍贯");
// columnName.add("系别");
// //初始化roeData
// rowData=new Vector();
// Connection con=null;//
// PreparedStatement stmt=null;
// ResultSet rs=null;
// //rowData可以存放很多行
//
// try {
// // 第一步   加载驱动 作用是把需要的驱动加载到内存
//         Class.forName("com.mysql.jdbc.Driver");//加载oracle的驱动方式
//       //得到链接 指定链接到哪个数据源,用户名和密码
//         con=DriverManager.getConnection("jdbc:mysql://localhost:3306/itek88","root","888888");
//       //创建statement,创建的目的是用于发送sql语句到数据库
//         stmt=con.prepareStatement("select*from student");
//       //执行创建、删除、备份数据库
//  //executeUpdate可以执行cud操作(添加 删除 修改) 这个函数返回一个int值  说明添加成功了多少个
//         rs=stmt.executeQuery();
//         while(rs.next()){
//          Vector hang=new Vector();
//          hang.add(rs.getInt("id"));
//
// hang.add(rs.getString("name"));
// hang.add(rs.getString("sex"));
// hang.add(rs.getInt("age"));
//         hang.add(rs.getString("local"));
//         hang.add(rs.getString("dept"));
//        
//         //把这些数据加入到rowData
//         rowData.add(hang);
//         }
//
// } catch (Exception e) {
//
// }finally {
// try {
// if(rs!=null){
// rs.close();}
// if(stmt!=null){
// stmt.close();
// }
// if(con!=null){
// con.close();
// }
//
// } catch (SQLException e) {
// // TODO Auto-generated catch block
// e.printStackTrace();
// }
//
// }
    //把这些数据加入到rowData
 
//初始化JTable
sm=new StuModel();
    jt=new JTable(sm);//注意顺序
    //初始化 jsp JScrollpane
    jsp=new JScrollPane(jt);//把jt放进去
    //把jsp放到JFrame里面
    this.add(jsp);//默认是放在中间的 所以不用设置位置了
    this.add(jp1,"North");
    this.add(jp2,"South");
    this.setSize(400, 300);
//设置关闭的时候自动退出
    this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
    //设置可见
    this.setVisible(true);
    





}public void actionPerformed(ActionEvent arg0) {
//判断是哪个按钮被点击
if(arg0.getSource()==jb1){
//因为我们把对表的数据封装在了StuModel中,我们就可以完成简单的查询
System.out.println("用户希望查询");
String name1=this.jtf.getText().trim();
//写一个sql语句
String sql="select * from student where id='"+name1+"'";
//创建一个新的数据模型类并更新
sm=new StuModel(sql);
//更新Jtable
jt.setModel(sm);
}
//当用户点击添加
else if(arg0.getSource()==jb2){
StuAddDialog sa=new StuAddDialog(this, "添加学生", true);
//重新再获得新的数据模型
//构建新的数据模型,并跟新
sm=new StuModel();
//更新Jtable
jt.setModel(sm);
}else if(arg0.getSource()==jb4){
//说明用户希望删除记录
//1 得到学生id号码 拿到其中一行的第一列
//Jtable里面有getSelectrow 会返回用户点中的行 ,如果用户一行都没选择,会返回-1
int rowNum = this.jt.getSelectedRow();
if(rowNum==-1){
//提示
JOptionPane.showMessageDialog(this, "请选中一行");
return; //return到主函数
}
//得到学生编号

 String Stuid=(String) sm.getValueAt(rowNum, 0);//学号是第0列
 //链接数据库
Connection conn=null;//
PreparedStatement stmt=null;
ResultSet rs=null;
PreparedStatement pstmt=null; try {
// 第一步   加载驱动 作用是把需要的驱动加载到内存
         Class.forName("com.mysql.jdbc.Driver");//加载oracle的驱动方式
       //得到链接 指定链接到哪个数据源,用户名和密码
         conn=DriverManager.getConnection("jdbc:mysql://localhost:3306/itek88","root","888888");
       //创建statement,创建的目的是用于发送sql语句到数据库
        // stmt=con.prepareStatement(sql);
       //执行创建、删除、备份数据库
 //executeUpdate可以执行cud操作(添加 删除 修改) 这个函数返回一个int值  说明添加成功了多少个
//          rs=stmt.executeQuery();
//          while(rs.next()){
//         
//          }
         String strsql="delete from student where id=?";
         pstmt=conn.prepareStatement(strsql);
         //给参数赋值
         pstmt.setString(1, Stuid);
         
         //执行操作
         pstmt.executeUpdate();
     

} catch (Exception e1) {
e1.printStackTrace();
}finally {
try {
if(rs!=null){
rs.close();}
if(stmt!=null){
stmt.close();
}
if(conn!=null){
conn.close();
}

} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}
}
}
}