JAVA GUI 实现数据库可视化操作(简易版)

    学习了java的可视化控件还有数据库,我们可以写一个简单的可以实现增删改查的界面,界面效果大概如下(界面不太美观,过几天我会写一个JavaWeb项目来在浏览器上实现此功能,今天写下此博客来记录一下遇到的问题和解决方法)以下可以直接跳转到您想看的位置,点击跳转 ↓↓↓


- 先放一张截图:

在这里插入图片描述

            显然我们可以看到此软件的布局和功能:

  • 布局:
  1. 整体的面板采用的是BorderLayout布局方式:
          窗口大小不可以调整,但是窗口每次更新数据后会自动调整窗口的高度,来满足更多的数据能够输出到窗口中.
          在整体布局的上面(“North”)部分是一个独立的画板,来显示数据库表格中的所有数据,并按照一定格式显示出来,不可被编辑.
          在整体布局的Center部分也是独立的画板,只用来显示提示用户输入的信息.
          在布局的South(底部),添加了两行,如图中所示,一行是输入框一行是功能按钮.在右下角还有一个提示框,用来提示用户正确操作.
          修改操作没有添加,因为这几个输入框不能完全满足所有功能,修改功能也可以先删除再添加,效果一样。
  • 功能:
          如大家所见,实现了增删查的功能,至于改的操作,需要单独的界面,就暂时没有写.可以通过先删除,后增加的方式一样可以实现.
  1. 在添加时候:
    -输入数据不能为空,为空有报错机制,会提示用户;
    -添加的信息中学号不能重复,右下角也会给出提示
    -输入数据格式要正确,学号和年龄都用的整型变量来存储,在输入的时候添加了代码的限制,只能将数字输入.
  2. 删除的时候:
    -用户根据学号来删除,不重复,防止误删;
    -输入为空会提示
  3. 查询时候:
    -用户一次只能根据一条信息来查询(学号\姓名\年龄等均可,但是只能输入一项)
    -不输入或者输入多项会提示用户.

在这里插入图片描述

  1. 在java项目中使用jar包(本次使用):
        首先我们找到jar包的地址,然后在环境变量中将路径添加在CLASSPATH里面(注意分号结尾不加分号):
    在这里插入图片描述
  • 现在我们就可以连接数据库了。

  • 在设计的过程中遇到了几个问题
  1. 首先便是jar包的导入了,上面已经提到
  2. 其次就是关于在插入数据时侯,中文乱码问题的解决:
    这里我用的是Navicat,连接的是MySQL数据库,解决方法很简单,将useUnicode=true&characterEncoding=utf8";添加到URL地址就好(具体请看代码):
"jdbc:mysql://localhost:3306/name?useUnicode=true&characterEncoding=utf8";
  1. 浪费时间挺长的一项: 空指针异常!
    特别是在传递数据的时候,添加按钮监听器之后,取出用户输入的数据,然后再将数据输出或者转换成SQL语句.特别是在写查询语句的时候,因为查询的结果要输出,保存在字符串数组中,数组没有设定为static类型,导致一直报空指针异常的错误.卡在这好久.改成static类型的数组来存储数据就解决了.
  2. 关于转义字符:
    这个倒是很容易想到,不过还是错了一次,转义字符,比如:
String sql_1 = "insert into hello values(" + sno +",\'"+ sname +"\',\'" +ssex
									+"\'," + sage + ",\'" + sdept + "\')";

我们来看运行效果:

在这里插入图片描述
添加成功后会自动跳出一个新窗口来更新数据:

在这里插入图片描述

如果学号重复,会提示:
在这里插入图片描述
如果输入不合规也有报错:
在这里插入图片描述

在删除时候,若输入的学号不存在:
在这里插入图片描述
如果查询时候输入多项信息:
在这里插入图片描述
查询成功后,会跳出一个新窗口来重新输出查询的结果.
在这里插入图片描述

  • 源代码详解如下(一切尽在注释之中):
    我们在此将数据库连接代码和处理数据代码分开,结构如下:
    在这里插入图片描述
    其中,DBConnect.java显然是连接数据库的文件:
    数据库连接很简单,分三步来就可以
  1. 导入驱动
  2. 连接数据库
  3. 提交查询语句
    本文件很简单,具体代码如下:
import java.beans.Statement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;

public class DBConnect {
	private static String DRIVER = "com.mysql.jdbc.Driver";//注意不同的数据库此项不同,可百度到相应的语句.
	private static String URL = "jdbc:mysql://localhost:3306/usertest?useUnicode=true&characterEncoding=utf8";//在后面加的useUnicode=true&characterEncoding=utf8使数据库能够识别中文字符,解决乱码问题.
	private static String USERNAME = "your_username";//数据库用户名
	private static String PASSWORD = "your_password";//数据库密码
	private static Connection connection = null;
	
	@SuppressWarnings("rawtypes")
	Statement statement = null;	//状态
	ResultSet result= null;		//结果集
	
	static {
		try {
//			导入驱动,加载具体的驱动类
			Class.forName(DRIVER);
			System.out.println("连接数据库中...");
		}catch(ClassNotFoundException e) {
			e.printStackTrace();
		}
	}
	
	public static Connection getConnection() {
		
		try {
			connection = (Connection) DriverManager.getConnection(URL , USERNAME , PASSWORD);
			System.out.println("数据库连接成功!");
		}catch(SQLException e) {
			System.out.println("数据库连接失败!");
			e.printStackTrace();
		}
		
		return (Connection) connection;
		
	}

下面来看主要的代码,首先我们来看查询的方法(解释都在注释中):

	public void select_s(String sql_1) {
	//在这里我们传过来一个参数sql_1;我们会将sql_1初始化为" ",我们调用此方法是时候,会传来一个要进行上传运行的sql语句,或者传过来" "则代表没有语句要执行.下面有判断机制:
		DBConnect dbConnect = new DBConnect();		//首先我们导入DBConnect类来连接数据库
		Connection connection = (Connection) dbConnect.getConnection();	
		Statement statement = null; 
		/*我们在此选择的是Statement也可以用PreparedStatement,
		StatemenI和PreparedStatement都可以用于把sq1语句从java程序中发送到指定数据库,并执行sq1语句;
		若:直接使用Statement,驱动程序一般不会对sql语句作处理而直接交给数据库;
		使用PreparedStament,形成预编译的过程,并且会对语句作字集的转换.
		所以一般使用PreparedStament效率会更高一点;
		*/
		
		try {
			statement = (Statement) connection.createStatement();
		}catch(SQLException e) {
			e.printStackTrace();
		}
		ResultSet resultSet = null;
		if(sql_1 != " ") {//如果sql_1中的字符串是查询语句
			try {
				statement.executeUpdate(sql_1);//进行上传SQL语句的处理
			} catch (SQLException e) {
				e.printStackTrace();
			}
		}
			String sql = "select * from hello where Sno > 0"; //查询出所有的数据的语句
		try {
				resultSet = statement.executeQuery(sql);//保存在结果集中
		}catch(SQLException e) {
			e.printStackTrace();
		}
		
		try
		{
			while(resultSet.next())
			{
				int Sno = resultSet.getInt("Sno");
				String name = resultSet.getString("Sname");
				String Ssex = resultSet.getString("Ssex");
				String Sdept = resultSet.getString("Sdept");
				int Sage = resultSet.getInt("Sage");
				student_number[i] = Sno;//将学号存入数组,并且固定格式
				date_string[i++] = "学号:" + Sno + ",姓名:" +name + ",性别:" + 
						Ssex + ",年龄:" + Sage + "岁,专业:" + Sdept;
						//用到了变量i,i的大小就是数据库中数据的数目,我们用它来调节窗口,输出数据.
			}
			resultSet.close();
		}catch(SQLException q)
		{
			q.printStackTrace();
		}finally {
			try {
				statement.close();
			} catch (SQLException e) {
				
				e.printStackTrace();
			}
			try {
				connection.close();
			} catch (SQLException e) {
				
				e.printStackTrace();
			}
		}
	}

  • 下面是图形界面的设计和监听器的使用:
public Change() {
		
		String sql_q = " "; //我们要调用上面的方法来获取数据,先输出所有的数据到窗口,所以初始化方法的参数
				
		select_s(sql_q);
		
		setTitle("数据库作业");
		this.setBackground(Color.LIGHT_GRAY);
		this.setLocation(500, 300);			//设置窗口出现位置
		this.setSize(400, 45*i);		//自动随数据数目增多高度变大,排版较好
        this.setResizable(false);	//不可以调整窗口大小
        /*然后添加一个画板,来设计第一部分(输出数据的部分)
        容易发现,我在此处新建了两个画板,
        因为我们正常输出需要一个
        而我们的查询语句查询的结果输出也需要一个画板
        所以在此设置两个画板,通过查询语句结果集中数据的个数K的值来
        决定用哪一个输出.
		*/
        JPanel date1 = new JPanel();	
        date1.setLayout(new GridLayout(k + 1, 1, 1, 1)); //这是查询语句对应的画板
        
        JPanel date = new JPanel();
        date.setLayout(new GridLayout(i + 1, 1, 1, 1));//这是输出全部数据用到的画板
        if(k > 0) {
        	for(int l = 0 ; l < k ; l++) {
        		text3[l] = new JTextField(date_string2[l]);	//如果查询语句对应的结果个数不为0就输出,且每次输出之后都会重置k的值,所以不用担心.
        		text3[l].setEditable(false);
        	}
        	for(int j = 0 ; j < k; j++) {
            	date1.add(text3[j]);//刚才new了结果集文本框数组,我们循环将它们添加到画板
            }
        }else {
        	
        	for(int j = 0 ; j < i; j++) {
            	text[j] = new JTextField(date_string[j]);
            	text[j].setEditable(false);//同理
            }
            for(int j = 0 ; j < i; j++) {
            	date.add(text[j]);
            }
        }
       
 
        /*接下来是添加的另一个面板(提示用户输入的对应信息的画板,
        这里我用的JButton,当然也可以用JTextField.*/
        JPanel use = new JPanel();
        use.setLayout(new GridLayout(1,1 , 6 ,0));
        for(int j = 0 ; j < text_name.length ; j++) {
        	text2[j] = new JButton(text_name[j]);
        	//我们在上面已经准备好了字符串数组,将提示内容循环导入就好
        	//先创建按钮,再导入画板
        }
        for(int j = 0 ; j < text_name.length ; j++) {
        	use.add(text2[j]);
        }
 
        JPanel input = new JPanel();//这里是组成大画板的最后一个画板,在窗口的底部
        //包含两行,第一行,给用户提供五个输入框,分别赌赢提示的输入内容.
        //第二行,对应功能按钮,和两个提示文本框
        input.setLayout(new GridLayout(2,1,6,10));//间距改的比较大一些,看得舒服
        for(int j = 0 ; j < text_name.length ; j++) {
        	input_name[j] = new JTextField();
        	input_name[j].setEditable(true);
        }
        
        for(int j = 0 ; j < text_name.length ; j++) {
        	input.add(input_name[j]);
        }
        
        temp[0] = new JTextField("选择功能");	//第一个提示框
        temp[0].setEditable(false);
        temp[0].setHorizontalAlignment(JTextField.CENTER);
        temp[0].setForeground(Color.red);
        input.add(temp[0]);
        for(int j = 0 ; j < 3 ; j++) {
        	select_menu[j] = new JButton(select[j]);
        }
        for(int j = 0 ; j < 3 ; j++) {
        	input.add(select_menu[j]);
        }
        if(count == 0) {	
        	temp[1] = new JTextField();	
        	//第二个提示框,根据不同的标志的数值,来判断是否成功的运行,防止程序崩溃
        }else if(count == 1) {
        	temp[1] = new JTextField("添加成功");
        }else if(count == 2) {
        	temp[1] = new JTextField("删除成功");
        }else if(count == 3) {
        	temp[1] = new JTextField("查询成功");
        }
        
        temp[1].setEditable(false);
        temp[1].setHorizontalAlignment(JTextField.CENTER); //文字调到中心
        temp[1].setForeground(Color.RED);	//红色提醒
        input.add(temp[1]);
        
//注册监听器(容易理解)
//直接在这里注册功能按钮按下的时候的监听器,对于我来说比较容易理解
        select_menu[0].addActionListener(new ActionListener() {//这个按钮对应增加操作
			public void actionPerformed(ActionEvent e) {
				String a = e.getActionCommand();
				int n = 0;//输入的五个数据中为空的个数,
				if(a.equals("增")) {
					for(int j = 0 ; j < 5 ; j++) {
						if(input_name[j].getText().equals(""))
							n++;
					}//输入有一个是空的都会报错,提醒用户
					int q = 0;//判断学号是否重复;
					if(n == 0) {
						int sno = Integer.parseInt(input_name[0].getText());
						for(int j = 0 ; j < i ; j++) {
							if(sno == student_number[j]) {
								temp[1].setText("学号重复");
								q = 1;//学号重复标志
							}
						}
					if(q != 1) {//如果学号没重复,进行插入操作
							String sname = input_name[1].getText();
							String ssex = input_name[2].getText();
							int sage = Integer.parseInt(input_name[3].getText());
							String sdept = input_name[4].getText();
							String sql_1 = "insert into hello values(" + sno +",\'"+ sname +"\',\'" +ssex
									+"\'," + sage + ",\'" + sdept + "\')";
									//注意转义字符
							System.out.println(sql_1);//输出到控制台进行测试
							select_s(sql_1);//进行上传查询语句
							Change aa = new Change();
							//因为进行了数据更新操作,所以需要重新同步一下数据.
							aa.setVisible(true);
							temp[1].setText("添加成功");
							aa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
						
						}
					}else {
						temp[1].setText("输入为空");
					}
						
				}
			}
        	
        });
        select_menu[1].addActionListener(new ActionListener() {//这个按钮对应删除操作

			public void actionPerformed(ActionEvent e) {
				int exist = 0;//要删除的学生是否存在,(利用之前查询到的结果加快处理)
				if(input_name[0].getText().equals("")) {//没有输入就点击删除,很显然错误
					temp[1].setText("学号为空");
				}else {
					int sno = Integer.parseInt(input_name[0].getText());//String转int
					for(int j = 0 ; j < i ; j++) {
						if(sno == student_number[j]) {
							exist = 1;
						}
					}
					if(exist == 1) {//要删除的对象存在
						String sql = "delete from hello where Sno = " + sno;
						select_s(sql );
						Change aa = new Change();
						aa.setVisible(true);
						temp[1].setText("删除成功");
						aa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					}else {//要删除的对象不存在,显然学号输入错误
						temp[1].setText("学号错误");
					}
				}
				
			}
        	
        });
        select_menu[2].addActionListener(new ActionListener() {//这个按钮对应查询操作

			public void actionPerformed(ActionEvent e) {
				
				String sql = "";
				int n = 0;//五个输入框输入不为空的数目(一次只能根据一项原则查询)
				int temp1 = -1;//记录下标(根据什么进行查询0是学号,1是姓名,2是性别,对应五个输入框)
				for(int j = 0 ; j < 5 ; j++) {
					if(!input_name[j].getText().equals("")) {
						n++;
						temp1 = j;
					}
				}
				if(n == 0) {//都为空
					temp[1].setText("输入为空!");
				}else if(n > 1) {//查询规则大于1
					temp[1].setText("别输入多项");
				}else if(n == 1) {
				//刚好按照一个条件来查询,正确,下面进行分类(switch语句会更好一些)
					if(temp1 == 0) {
						//学号
						int sno = Integer.parseInt(input_name[temp1].getText());
						sql = "select * from hello where Sno = " + sno;
					}else if(temp1 == 3) {
						//年龄
						int age = Integer.parseInt(input_name[temp1].getText());
						sql = "select * from hello where Sage = " + age;
					}else if(temp1 == 1){
					//姓名
						String name = input_name[temp1].getText();
						sql = "select * from hello where Sname = \'" + name +"\'"; 
					}else if(temp1 == 2) {
						//性别
						String sex = input_name[temp1].getText();
						sql = "select * from hello where Ssex = \'" + sex +"\'";
					}else if(temp1 == 4) {
						//专业
						String dept = input_name[temp1].getText();
						sql = "select * from hello where Sdept = \'" + dept +"\'"; 
					}
					//我们在这里需要进行单独的一次查询,调用函数会有空指针异常的报错,
					//回头再测试解决方法吧.
					//过程已经介绍过
					DBConnect dbConnect = new DBConnect();
					Connection connection = (Connection) dbConnect.getConnection();
					Statement statement = null;
					
					try {
						statement = (Statement) connection.createStatement();
					}catch(SQLException e2) {
						e2.printStackTrace();
					}
					ResultSet resultSet2 = null;
					try {
						resultSet2 = statement.executeQuery(sql);
				}catch(SQLException e2) {
					e2.printStackTrace();
				}
				
				try
				{
					while(resultSet2.next())
					{
						int Sno = resultSet2.getInt("Sno");
						String name = resultSet2.getString("Sname");
						String Ssex = resultSet2.getString("Ssex");
						String Sdept = resultSet2.getString("Sdept");
						int Sage = resultSet2.getInt("Sage");
						date_string2[k++] = "学号:" + Sno + ",姓名:" +name + ",性别:" + 
								Ssex + ",年龄:" + Sage + "岁,专业:" + Sdept;
						
					}
					resultSet2.close();
				}catch(SQLException q)
				{
					q.printStackTrace();
				}finally {
						try {
							statement.close();
						} catch (SQLException e2) {
							
							e2.printStackTrace();
						}
						try {
							connection.close();
						} catch (SQLException e2) {
							
							e2.printStackTrace();
						}
					}
					
					Change aa = new Change();
					aa.setVisible(true);
					temp[1].setText("查询成功");
					aa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				}
				k = 0;	//输出结果后,将K置零,前面已提到
			}
        	
        });
       
        //getContentPane方法获取当前的总面板,我们设置以下属性即可.
        getContentPane().setLayout(new BorderLayout(3, 2));
        if(k > 0) {//对应前面说到的,按照K的值来选择输出全部还是输出查询功能对应的结果集
        	getContentPane().add("North" , date1);	//North对应顶部
        }else
        	getContentPane().add("North" , date);		
        getContentPane().add("Center" , use);
        getContentPane().add("South" , input);//South对应底部
        input.setPreferredSize(new Dimension(0,80));//设置底部控件,更平衡一些.
	}
  • 下面附上Change.java完整代码:
package 数据库;

import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Dimension;
import java.awt.GridLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.JTextField;

import com.mysql.jdbc.Connection;

public class Change extends JFrame implements ActionListener{

	private static final long serialVersionUID = 1L;
	private JTextField text[] = new JTextField[100];//输出表中全部信息用到的文本框
	private JTextField text3[] = new JTextField[100];//输出查询结果的新面板用到的文本框
	String date_string[] = new String[100];			//存储数据库表中所有数据为String格式(配合上面的text[]使用)
	static String date_string2[] = new String[100];	//存储查询操作后的数据为字符串格式,(和text3[]配合使用)
	
	private String[] text_name = {"学号", "姓名" , "性别" , "年龄" , "系别"};
	private JButton text2[] = new JButton[text_name.length];
	private JTextField [] input_name = new JTextField[text_name.length];
	private JTextField [] temp = new JTextField[2];
	private JButton [] select_menu = new JButton[4];
	private String[] select = {"增", "删"  ,"查"};
	int i = 0;
	static String asa;
//	String date;
	static int k = 0;//用来查询
	int [] student_number = new int[100];//储存学生的学号(添加时候防重复)
	int count = 0;//用来判断是增删改查其中的一个
	public void select_s(String sql_1) {
		DBConnect dbConnect = new DBConnect();
		Connection connection = (Connection) dbConnect.getConnection();
		Statement statement = null;
		
		try {
			statement = (Statement) connection.createStatement();
		}catch(SQLException e) {
			e.printStackTrace();
		}
		ResultSet resultSet = null;
		if(sql_1 != " ") {
			try {
				statement.executeUpdate(sql_1);
			} catch (SQLException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		}
		
			String sql = "select * from hello where Sno > 0";
			
		try {
				resultSet = statement.executeQuery(sql);
		}catch(SQLException e) {
			e.printStackTrace();
		}
		
		try
		{
			while(resultSet.next())
			{
				int Sno = resultSet.getInt("Sno");
				String name = resultSet.getString("Sname");
				String Ssex = resultSet.getString("Ssex");
				String Sdept = resultSet.getString("Sdept");
				int Sage = resultSet.getInt("Sage");
				student_number[i] = Sno;//将学号存入数组
				date_string[i++] = "学号:" + Sno + ",姓名:" +name + ",性别:" + 
						Ssex + ",年龄:" + Sage + "岁,专业:" + Sdept;
			}
			resultSet.close();
		}catch(SQLException q)
		{
			q.printStackTrace();
		}finally {
			try {
				statement.close();
			} catch (SQLException e) {
				
				e.printStackTrace();
			}
			try {
				connection.close();
			} catch (SQLException e) {
				
				e.printStackTrace();
			}
		}
	}

	
	public Change() {
		
		String sql_q = " ";
		
		select_s(sql_q);
		
		setTitle("数据库作业");
		this.setBackground(Color.LIGHT_GRAY);
		this.setLocation(500, 300);
		this.setSize(400, 45*i);		//自动随数据数目增多高度变大,排版较好
        this.setResizable(false);	
        
        JPanel date1 = new JPanel();
        date1.setLayout(new GridLayout(k + 1, 1, 1, 1));
        
        JPanel date = new JPanel();
        date.setLayout(new GridLayout(i + 1, 1, 1, 1));
        if(k > 0) {
        	for(int l = 0 ; l < k ; l++) {
        		text3[l] = new JTextField(date_string2[l]);
        		text3[l].setEditable(false);
        	}
        	for(int j = 0 ; j < k; j++) {
            	date1.add(text3[j]);
            }
        }else {
        	
        	for(int j = 0 ; j < i; j++) {
            	text[j] = new JTextField(date_string[j]);
            	text[j].setEditable(false);
            }
            for(int j = 0 ; j < i; j++) {
            	date.add(text[j]);
            }
        }
        
        //接下来是添加的面板:
        JPanel use = new JPanel();
        use.setLayout(new GridLayout(1,1 , 6 ,0));
        for(int j = 0 ; j < text_name.length ; j++) {
        	text2[j] = new JButton(text_name[j]);
        }
        for(int j = 0 ; j < text_name.length ; j++) {
        	use.add(text2[j]);
        }
 
        JPanel input = new JPanel();
        input.setLayout(new GridLayout(2,1,6,10));
        for(int j = 0 ; j < text_name.length ; j++) {
        	input_name[j] = new JTextField();
        	input_name[j].setEditable(true);
        }
        
        for(int j = 0 ; j < text_name.length ; j++) {
        	input.add(input_name[j]);
        }
        
        temp[0] = new JTextField("选择功能");
        temp[0].setEditable(false);
        temp[0].setHorizontalAlignment(JTextField.CENTER);
        temp[0].setForeground(Color.red);
        input.add(temp[0]);
        for(int j = 0 ; j < 3 ; j++) {
        	select_menu[j] = new JButton(select[j]);
        }
        for(int j = 0 ; j < 3 ; j++) {
        	input.add(select_menu[j]);
        }
        if(count == 0) {
        	temp[1] = new JTextField();
        }else if(count == 1) {
        	temp[1] = new JTextField("添加成功");
        }else if(count == 2) {
        	temp[1] = new JTextField("删除成功");
        }else if(count == 3) {
        	temp[1] = new JTextField("查询成功");
        }
        
        temp[1].setEditable(false);
        temp[1].setHorizontalAlignment(JTextField.CENTER);
        temp[1].setForeground(Color.RED);
        input.add(temp[1]);
        
//注册监听器(容易理解)
        select_menu[0].addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				String a = e.getActionCommand();
				int n = 0;//输入为空的个数
				if(a.equals("增")) {
					for(int j = 0 ; j < 5 ; j++) {
						if(input_name[j].getText().equals(""))
							n++;
					}
					int q = 0;//判断学号是否重复;
					if(n == 0) {
						int sno = Integer.parseInt(input_name[0].getText());
						for(int j = 0 ; j < i ; j++) {
							if(sno == student_number[j]) {
								temp[1].setText("学号重复");
								q = 1;
							}
						}
					if(q != 1) {
							String sname = input_name[1].getText();
							String ssex = input_name[2].getText();
							int sage = Integer.parseInt(input_name[3].getText());
							String sdept = input_name[4].getText();
							String sql_1 = "insert into hello values(" + sno +",\'"+ sname +"\',\'" +ssex
									+"\'," + sage + ",\'" + sdept + "\')";
							System.out.println(sql_1);
							select_s(sql_1);
							Change aa = new Change();
							aa.setVisible(true);
							temp[1].setText("添加成功");
							aa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
						
						}
					}else {
						temp[1].setText("输入为空");
					}
						
					
				}
			}
        	
        });
        select_menu[1].addActionListener(new ActionListener() {

			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				int exist = 0;
				if(input_name[0].getText().equals("")) {
					temp[1].setText("学号为空");
				}else {
					int sno = Integer.parseInt(input_name[0].getText());
					for(int j = 0 ; j < i ; j++) {
						if(sno == student_number[j]) {
							exist = 1;
						}
					}
					if(exist == 1) {
						String sql = "delete from hello where Sno = " + sno;
						select_s(sql );
						Change aa = new Change();
						aa.setVisible(true);
						temp[1].setText("删除成功");
						aa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
					}else {
						temp[1].setText("学号错误");
					}
				}
				
			}
        	
        });
        select_menu[2].addActionListener(new ActionListener() {

			public void actionPerformed(ActionEvent e) {
				
				String sql = "";
				int n = 0;//输入不为空的数目
				int temp1 = -1;//记录下标
				for(int j = 0 ; j < 5 ; j++) {
					if(!input_name[j].getText().equals("")) {
						n++;
						temp1 = j;
					}
				}
				if(n == 0) {
					temp[1].setText("输入为空!");
				}else if(n > 1) {
					temp[1].setText("别输入多项");
				}else if(n == 1) {
					if(temp1 == 0) {
						//学号
						int sno = Integer.parseInt(input_name[temp1].getText());
						sql = "select * from hello where Sno = " + sno;
					}else if(temp1 == 3) {
						int age = Integer.parseInt(input_name[temp1].getText());
						sql = "select * from hello where Sage = " + age;
					}else if(temp1 == 1){
						String name = input_name[temp1].getText();
						sql = "select * from hello where Sname = \'" + name +"\'"; 
					}else if(temp1 == 2) {
						String sex = input_name[temp1].getText();
						sql = "select * from hello where Ssex = \'" + sex +"\'";
					}else if(temp1 == 4) {
						String dept = input_name[temp1].getText();
						sql = "select * from hello where Sdept = \'" + dept +"\'"; 
					}
					DBConnect dbConnect = new DBConnect();
					Connection connection = (Connection) dbConnect.getConnection();
					Statement statement = null;
					
					try {
						statement = (Statement) connection.createStatement();
					}catch(SQLException e2) {
						e2.printStackTrace();
					}
					ResultSet resultSet2 = null;
					try {
						resultSet2 = statement.executeQuery(sql);
				}catch(SQLException e2) {
					e2.printStackTrace();
				}
				
				try
				{
					while(resultSet2.next())
					{
						int Sno = resultSet2.getInt("Sno");
						String name = resultSet2.getString("Sname");
						String Ssex = resultSet2.getString("Ssex");
						String Sdept = resultSet2.getString("Sdept");
						int Sage = resultSet2.getInt("Sage");
						date_string2[k++] = "学号:" + Sno + ",姓名:" +name + ",性别:" + 
								Ssex + ",年龄:" + Sage + "岁,专业:" + Sdept;
						
					}
					resultSet2.close();
				}catch(SQLException q)
				{
					q.printStackTrace();
				}finally {
						try {
							statement.close();
						} catch (SQLException e2) {
							
							e2.printStackTrace();
						}
						try {
							connection.close();
						} catch (SQLException e2) {
							
							e2.printStackTrace();
						}
					}
					
					Change aa = new Change();
					aa.setVisible(true);
					temp[1].setText("查询成功");
					aa.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
				}
				k = 0;
			}
        	
        });
       
        
        getContentPane().setLayout(new BorderLayout(3, 2));
        if(k > 0) {
        	getContentPane().add("North" , date1);	
        }else
        	getContentPane().add("North" , date);		
        getContentPane().add("Center" , use);
        getContentPane().add("South" , input);
        use.setPreferredSize(new Dimension(0 , 20));
        input.setPreferredSize(new Dimension(0,80));
	}
	
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		Change a = new Change();
		a.setVisible(true);
		a.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
	}
	
	@Override
	public void actionPerformed(ActionEvent e) {
		// TODO Auto-generated method stub
	}

}

感谢阅读

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值