Java学生管理系统MySQL加GUI版

3 篇文章 0 订阅
2 篇文章 0 订阅

功能介绍:

大体用的是卡片布局

该系统使用的是JTable来显示数据库里的数据

 

/**
	 * 调用数据库显示学生信息。
	 */
	private void showxsxx() {
		String sql="select *from studentdata";
		
		try {
			xuesxx= sqlcz.select(Studentdata.class, sql);
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		//创建行和列二维数组。
		tzhi=new Object[xuesxx.size()][Studentdata.size];
		Studentdata stdat=null;
		for(int i=0;i<xuesxx.size();i++) {
			stdat=xuesxx.get(i);
			for(int j=0;j<Studentdata.size;j++) {
				tzhi[i][j]=stdat.getValue(j);
			}
		}
		
//		新建表模型
		tablemodel=new DefaultTableModel(tzhi,columns);
		jtable=new JTable(tablemodel);
//		设置专业那一列的列宽
		jtable.getColumnModel().getColumn(6).setPreferredWidth(170);
		//设置表格大小
//		jtable.setPreferredScrollableViewportSize(new Dimension(500,300));
		
		/*// 选择模式为单选,就只能选一行
		jtable.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);*/
		/*// 关闭表格列的自动调整功能 ,默认自动调整
        jtable.setAutoResizeMode(JTable.AUTO_RESIZE_OFF);*/
        // 被选择行的背景色为黄色
        jtable.setSelectionBackground(Color.LIGHT_GRAY);
        // 被选择行的前景色(文字颜色)为黄色
        jtable.setSelectionForeground(Color.YELLOW);
        jtable.setRowHeight(30); // 表格的行高为30像素
        //填充整个视图
        jtable.setFillsViewportHeight(true);

		jtable.setFont(font);
        //设置表格显示在滚动面板
		scroll.setViewportView(jtable);
	}

jdbc关键代码:数据的增删改查操作代码

这里我用的是只针对学生数据表的增删改操作。

查询则是针对不同表的

package student;

import java.lang.reflect.Field;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Vector;

import utils.SqlUtils;

//?占位符不可以用来设置不要加'的,因为会自动加'
public class CrudOption {
	private Connection con;
	/**
	 * 数据增改操作 用的数据库事务。防止出错,保护数据,即一条出错全部取消执行。
	 * 该方法使用batch批量处理数据执行,增加效率.
	 * @param String sql
	 * @param Vector datas要填充预编译(?)的条件数据。
	 * @return boolean
	 * @throws SQLException
	 */
	public boolean zenGai(String sql,Vector<Studentdata> datas){
		con=SqlUtils.getConnection();
		if(datas==null) {
			//没有数据直接返回
			return false;
		}
		PreparedStatement prs = null;
		try { 
			//预编译语句对象
			prs= con.prepareStatement(sql);
			// 关闭自动提交, 启用事务
			con.setAutoCommit(false);
			Studentdata stda=null;
			for(int i=0;i<datas.size();i++) {
				//每一行的数据
				stda=(Studentdata) datas.get(i);
				//填充每一条sql预编译语句
				for(int col=0;col<stda.size;col++) {
					//数据库操作以1为第一个
					prs.setObject(col+1, stda.getValue(col));
//					有两倍?所以再加一遍.
					prs.setObject(col+1+stda.size, stda.getValue(col));
				}
				//添加进批处理batch集
				prs.addBatch();
			}
			//执行所有语句
			prs.executeBatch();
			//提交事务
			con.commit();
			return true;
		} catch (SQLException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}finally {
//			关闭占用的资源
			SqlUtils.closeConnnction(con, prs);
		}
		return false;
		
		
	}
	/**
	 * clazz 为类的
	 * 不同的表的查询操作
	 * @param  Class clazz
	 * @param sql
	 * @param 可变数组 fill
	 * @return
	 * @throws SQLException
	 */
//	T泛型表示是那个类的对象,即哪张表的数据。
	public <T> Vector<T> select(Class<T> clazz,String sql,Object ...fill) throws SQLException {
		Vector<T> alist=new Vector<>();//存取查询的每一行数据
		//获取连接对象
		con=SqlUtils.getConnection();
		PreparedStatement prs=con.prepareStatement(sql);
		for(int i=0;i<fill.length;i++) {
			prs.setObject(i+1, fill[i]);
		}
//		执行查询语句获得查询结果。查询结果集ResultSet
		ResultSet executeQuery = prs.executeQuery();
		//metaData对象主要是为了获取列名和列的数量。
		ResultSetMetaData metaData = executeQuery.getMetaData();
		try {
			while(executeQuery.next()) {
			
				T rdata=clazz.newInstance();
				//数据库操作以1表示第一个数据,有多少列就要等于多少。
				for(int i=1;i<=metaData.getColumnCount();i++) {
					//学生表类要设置和数据库学生表字段列名一摸一样。才能获取相对应的字段。
					Field field = clazz.getDeclaredField(metaData.getColumnName(i));
//					将数据添加进rdata对象
					field.setAccessible(true);
					field.set(rdata,executeQuery.getObject(i));
				}
//				将该行的数据添加进集合以供返回给查询者
				alist.add(rdata);
			}
		} catch (InstantiationException | IllegalAccessException e) {

			e.printStackTrace();
		} catch (NoSuchFieldException e) {
			
			e.printStackTrace();
		} catch (SecurityException e) {

			e.printStackTrace();
		}finally {
			//关闭连接
			SqlUtils.closeConnnction(con, prs);
		}
		
		return alist;
		
	}
}

更多细节下次补充。关于该系统的编写可以评论或者私信我了解哦

 

  • 1
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
录入=new JButton("录入"); 查询=new JButton("查询");删除=new JButton("删除"); 修改=new JButton("修改");显示=new JButton("显示");录入.addActionListener(new InputAct());查询.addActionListener(new InquestAct()); 修改.addActionListener(new ModifyAct());删除.addActionListener(new DeleteAct());显示.addActionListener(new ShowAct()); 修改.setEnabled(false); p1=new JPanel(); p1.add(new JLabel("学号:",JLabel.CENTER)); p1.add(学号); p2=new JPanel(); p2.add(new JLabel("姓名:",JLabel.CENTER)); p2.add(姓名); p3=new JPanel(); p3.add(new JLabel("性别:",JLabel.CENTER)); p3.add(男); p3.add(女); p4=new JPanel(); p4.add(new JLabel("专业:",JLabel.CENTER)); p4.add(专业); p5=new JPanel(); p5.add(new JLabel("年级:",JLabel.CENTER)); p5.add(年级); p6=new JPanel(); p6.add(new JLabel("出生:",JLabel.CENTER)); p6.add(出生); pv=new JPanel(); pv.setLayout(new GridLayout(6,1)); pv.add(p1); pv.add(p2); pv.add(p3); pv.add(p4); pv.add(p5); pv.add(p6); ph=new JPanel(); ph.add(录入); ph.add(查询); ph.add(修改); ph.add(删除); ph.add(显示); file=new File("学生信息.txt"); 学生散列表=new Hashtable(); if(!file.exists()){ try{ FileOutputStream out=new FileOutputStream(file); ObjectOutputStream objectOut=new ObjectOutputStream(out); objectOut.writeObject(学生散列表); objectOut.close(); out.close(); } catch(IOException e){} } Container con=getContentPane(); con.setLayout(new BorderLayout()); con.add(lb, BorderLayout.WEST); con.add(pv, BorderLayout.CENTER); con.add(ph, BorderLayout.SOUTH); setDefaultCloseOperation(EXIT_ON_CLOSE); setBounds(100,100,600,300); setVisible(true); Statement stmt; ResultSet rs; } public static void main(String[] args) {StudentManager ff=new StudentManager();} //添学生信息,的Mysql操作 public class InputAct implements ActionListener{ public void actionPerformed(ActionEvent e){ 修改.setEnabled(false); String number=""; number=学号.getText(); if(number.length()>0){ if(学生散列表.containsKey(number)){ String warning="该生信息已存在,请到修改页面修改!"; JOptionPane.showMessageDialog(null,warning,"警告", JOptionPane.WARNING_MESSAGE); }//end if1 else{ String m="该生信息将被录入!"; int ok=JOptionPane.showConfirmDialog(null,m,"确认", JOptionPane.YES_NO_OPTION,JOptionPane.INFORMATION_MESSAGE); if(ok==JOptionPane.YES_OPTION) { try { Class.forName("org.gjt.mm.mysql.Driver"); } catch(java.lang.ClassNotFoundException e11) { System.out.println("Class not found exception occir.Message is:"); System.out.println(e11.getMessage()); } try { PreparedStatement prepstmt1; Statement stmt; ResultSet rs; String url = "jdbc:mysql://localhost/test?user=root&password=0&useUnicode=true&&characterEncoding=8859_1"; String user="root"; String password="0"; Connection conn=null; try { conn=DriverManager.getConnection(url,user,password); } catch(Exception ex) { ex.printStackTrace(); } //对制定的数据库信息 String sql1="INSERT INTO students(student_id,name,sex,job,data,grade)"+"VALUES(?,?,?,?,?,?)"; prepstmt1=(PreparedStatement)conn.prepareStatement(sql1); prepstmt1.setString(1,学号.getText()); prepstmt1.setString(2,姓名.getText()); if(男.isSelected()){prepstmt1.setString(3,"男.getText()");} else{prepstmt1.setString(3,女.getText());} prepstmt1.setString(4,专业.getText()); prepstmt1.setString(5,年级.getText()); prepstmt1.setString(6,出生.getText()); prepstmt1.executeUpdate(); } catch(SQLException e1) { System.out.println("SQL Exception occur.Message is:"); System.out.println(e1.getMessage()); } } else{ String warning="必须输入学号!"; JOptionPane.showMessageDialog(null,warning, "警告",JOptionPane.WARNING_MESSAGE); }//end else0 } } else{ String warning="必须输入学号!"; JOptionPane.showMessageDialog(null,warning, "警告",JOptionPane.WARNING_MESSAGE); } } }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值