Java学生管理系统(连接数据库查询)超详细
这几天逼着交Java,借鉴各位师傅的做出来这么个简陋的东西,各位大师傅不要笑我。(学都没有学过Java的我,QAQ~)
下面针对的都是SQL Server系列的连接,如果你使用MySQL那么不必看关于连接数据库的介绍。
数据库驱动JDBC在Ecilpse安装教程:点击进入
项目及素材下载链接:点击下载
常见问题:
端口拦截
连接数据库时,端口被防火墙拦截,检查端口是否开放,然后重启sql server服务。
代码使用
在使用代码时,需要额外创建一个包,如图创建
数据库账号密码问题
Java连接数据库需要SQL登录方式,需要账号密码,如果说不知道自己是否是混合登录,或者说忘记密码,可以这样做:
打开数据库软件,连接数据库(Windows登录就可以了)。
右键你的本地数据库
打开属性,点击安全性,查看是否是SQL Server和Windows混合登录。(不是就点上)
接着依次打开安全性-->登录名,那个sa就是我的管理员账号。
双击点开,就可以在账号框和密码框进行账号名,密码更改,最后确认就行。
如果没有账号的话,右键登录名,选择新建登录名,重新创建一个SQL登陆方式的账户。
查看自己的数据库名称:
这个“master”就是我的数据库名称,同时也储存着我的数据。
代码:
Login.java
- import java.awt.Color;
- import java.awt.Cursor;
- import java.awt.Font;
- import java.awt.Image;
- import java.awt.Point;
- import java.awt.Toolkit;
- import java.awt.event.ActionEvent;
- import java.awt.event.ActionListener;
- import javax.swing.BorderFactory;
- import javax.swing.ButtonGroup;
- import javax.swing.Icon;
- import javax.swing.ImageIcon;
- import javax.swing.JButton;
- import javax.swing.JFrame;
- import javax.swing.JLabel;
- import javax.swing.JOptionPane;
- import javax.swing.JPanel;
- import javax.swing.JPasswordField;
- import javax.swing.JRadioButton;
- import javax.swing.JTextField;
- import pack.VerCode;
- public class Login {
- String StudentAccount="123456";
- String StudentPassWord="123456";
- JLabel L, L1, L2, L3, L4, BK;
- JTextField te1, te3;
- JPasswordField te2;
- JRadioButton value1, value2;
- JButton B1, B2;
- ButtonGroup bg;
- JPanel jp1,jp2,jp3,jp4;
- //设置图标
- Icon v1 = new ImageIcon("p3.png");
- Icon v2 = new ImageIcon("p4.png");
- Icon v3 = new ImageIcon("p5.png");
- Icon v4 = new ImageIcon("p6.png");
- private VerCode VerCode = new VerCode();//引用验证码函数
- public static void main(String[] args) {
- Login frame=new Login();
- frame.show();
- }
- JFrame frame=new JFrame();//frame界面
- public void show() {
- setBackgroudImage();
- Toolkit tk = Toolkit.getDefaultToolkit();//默认加载方式
- Image image = new ImageIcon(getClass().getResource("p6.png")).getImage();//设置光标图片
- Cursor cursor = tk.createCustomCursor(image, new Point(10, 10), "biubiubiu");//光标image属性,指定光标中心,光标文字描述
- frame.setCursor(cursor);
- L1=new JLabel("<html>账号:</html>");
- L1.setIcon(v1);
- te1=new JTextField(80);
- //设置密码窗口,使用'*'隐藏密码
- L2=new JLabel("<html>密码:</html>");
- L2.setIcon(v2);
- te2=new JPasswordField(80);//
- te2.setEchoChar('*');
- L4 = new JLabel("验证码:");
- L4.setIcon(v3);
- te3=new JTextField(80);
- //设置登录身份选择按钮
- jp2 = new JPanel();
- L3 = new JLabel("身份:");
- L3.setIcon(v4);
- value2=new JRadioButton("学生");
- SetBt(value2);
- //设置位置和大小
- L1.setBounds(60, 90, 60, 40);
- L2.setBounds(60, 140, 60, 40);
- L3.setBounds(60, 240, 60, 40);
- L4.setBounds(60, 190, 60, 40);
- jp2.setBounds(80, 240, 60, 40);
- te1.setBounds(130, 90, 150, 30);
- te2.setBounds(130, 140, 150, 30);
- te3.setBounds(130, 190, 150, 30);
- VerCode.setBounds(290, 190, 100, 40);
- value2.setBounds(120, 240, 60, 40);
- //设置'登录'及'重置'按钮
- B1=new JButton("登录");
- B1.setBounds(120, 280, 80, 40);
- SetBt(B1);
- ButtonListener li1=new ButtonListener(te1,te2);
- B2=new JButton("注册");
- B2.setBounds(250, 280, 80, 40);
- SetBt(B2);
- ButtonListener li2=new ButtonListener(te1,te2);
- //设置监听
- B1.addActionListener(li1);
- B2.addActionListener(li2);
- //组键添加到窗口
- frame.setLayout(null);
- //frame.add(L);
- frame.add(L1);
- frame.add(te1);
- frame.add(L2);
- frame.add(te2);
- frame.add(L3);
- frame.add(value2);
- frame.add(L4);
- frame.add(te3);
- frame.add(VerCode);
- frame.add(B1);
- frame.add(B2);
- frame.setVisible(true);//窗体设置为可见
- frame.setTitle("学生管理系统");
- frame.setSize(700,403);
- frame.setLocationRelativeTo(null);
- frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
- frame.setVisible(true);
- frame.setResizable(false);
- }
- private void SetBt(JButton b12) {
- b12.setBackground(new Color(102, 0, 204));//设置色值
- b12.setFont(new Font("宋体", Font.BOLD, 24));//设置字体,样式。字号
- b12.setOpaque(false);//设置控件透明
- b12.setBorder(BorderFactory.createEmptyBorder());
- }
- private void SetBt(JRadioButton b12) {
- b12.setBackground(new Color(102, 0, 204));
- b12.setFont(new Font("Dialog", Font.BOLD, 15));
- b12.setOpaque(false);//设置控件透明
- b12.setBorder(BorderFactory.createEmptyBorder());
- }
- public boolean isValidCodeRight() {//判断验证码是否有效
- if(te3 == null) {
- return false;
- }else if(VerCode == null) {
- return true;
- }else if(VerCode.getCode() .equals(te3.getText())) {
- return true;
- }else
- return false;
- }
- private void setBackgroudImage() {
- // TODO Auto-generated method stub
- ((JPanel) frame.getContentPane()).setOpaque(false);
- ImageIcon img = new ImageIcon("3.gif"); // 添加图片
- BK = new JLabel(img);
- frame.getLayeredPane().add(BK, new Integer(Integer.MIN_VALUE));
- BK.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());
- }
- //创建类实现接口
- public class ButtonListener implements java.awt.event.ActionListener{ //实现ActionListener 接口 implement
- JTextField te1=new JTextField(); //传参
- JPasswordField te2=new JPasswordField();
- Function hua=new Function(); //一个画板对象
- ButtonListener(JTextField te1,JPasswordField te2) {//重载 窗体上的账号框,密码框传到监听上来
- this.te1=te1;
- this.te2=te2;
- }
- public ButtonListener(JTextField ID) {
- // TODO Auto-generated constructor stub
- }
- @Override
- public void actionPerformed(ActionEvent ch) {
- // TODO Auto-generated method stub
- if(ch.getActionCommand()=="登录")
- {
- if(te3.getText().isEmpty()) {
- JOptionPane.showMessageDialog(null, "请输入验证码!");
- }else {
- if(!isValidCodeRight()) {
- JOptionPane.showMessageDialog(null, "验证码错误,请重新输入!","错误",JOptionPane.ERROR_MESSAGE);
- hua.bClear(te3);
- }
- else if(value2.isSelected())
- {
- hua.Student(StudentAccount, StudentPassWord, te1, te2, frame, hua);//学生
- }
- else if(ch.getActionCommand()=="重置")
- {
- hua.Clear(te1, te2);
- }
- }
- }
- }
- }
- }
VerCode.java
- package pack;
- import java.awt.Color;
- import java.awt.Dimension;
- import java.awt.Font;
- import java.awt.FontMetrics;
- import java.awt.Graphics;
- import java.awt.Graphics2D;
- import java.awt.event.MouseEvent;
- import java.awt.event.MouseListener;
- import java.util.Random;
- import javax.swing.JComponent;
- public class VerCode extends JComponent implements MouseListener {
- private String typeface;
- private int V1, V2 = 30;
- private int Len = 4;
- private Random random = new Random();
- public VerCode() {
- V1 = this.Len * 16 + (this.Len - 1) * 10;
- setPreferredSize(new Dimension(V1, V2));
- setSize(V1, V2);
- this.addMouseListener(this);
- setToolTipText("点击可以更换验证码");
- }
- public int getCodeLength() {
- return Len;
- }
- //设置验证码长度
- public void setCodeLength(int Len) {
- if(Len < 4) {
- this.Len = 4;
- } else {
- this.Len = Len;
- }
- }
- public String getCode() {
- return typeface;
- }
- //产生随机颜色
- public Color getRandColor(int min, int max) {
- if (min > 255)
- min = 255;
- if (max > 255)
- max = 255;
- int red = random.nextInt(max - min) + min;
- int green = random.nextInt(max - min) + min;
- int blue = random.nextInt(max - min) + min;
- return new Color(red, green, blue);
- }
- //设置验证码字母
- protected String generateCode() {
- char[] codes = new char[this.Len];
- for (int i = 0, len = codes.length; i < len; i++) {
- if (random.nextBoolean()) {
- codes[i] = (char) (random.nextInt(26) + 65);
- } else {
- codes[i] = (char) (random.nextInt(26) + 97);
- }
- }
- this.typeface = new String(codes);
- return this.typeface;
- }
- @Override
- protected void paintComponent(Graphics g) {
- super.paintComponent(g);
- if(this.typeface == null || this.typeface.length() != this.Len) {
- this.typeface = generateCode();
- }
- V1 = this.Len * 16 + (this.Len - 1) * 10;
- super.setSize(V1, V2);
- super.setPreferredSize(new Dimension(V1, V2));
- Font mFont = new Font("Arial", Font.BOLD | Font.ITALIC, 25);
- g.setFont(mFont);
- //绘制验证码的背景的矩形轮廓
- Graphics2D g2d = (Graphics2D) g;
- g2d.setColor(getRandColor(200, 250));
- g2d.fillRect(0, 0, V1, V2);
- g2d.setColor(getRandColor(180, 200));
- g2d.drawRect(0, 0, V1 - 1, V2 - 1);
- //绘制验证码背景的线
- int i = 0, len = 150;
- for (; i < len; i++) {
- int x = random.nextInt(V1 - 1);
- int y = random.nextInt(V2 - 1);
- int x1 = random.nextInt(V1 - 10) + 10;
- int y1 = random.nextInt(V2 - 4) + 4;
- g2d.setColor(getRandColor(180, 200));
- g2d.drawLine(x, y, x1, y1);
- }
- //绘制出验证码的具体字母
- i = 0; len = this.Len;
- FontMetrics fm = g2d.getFontMetrics();
- int base = (V2 - fm.getHeight())/2 + fm.getAscent();
- for(;i<len;i++) {
- int b = random.nextBoolean() ? 1 : -1;
- g2d.rotate(random.nextInt(10)*0.01*b);
- g2d.setColor(getRandColor(20, 130));
- g2d.drawString(typeface.charAt(i)+"", 16 * i + 10, base);
- }
- }
- //下一个验证码
- public void nextCode() {
- generateCode();
- repaint();
- }
- @Override
- public void mouseClicked(MouseEvent e) {
- nextCode();
- }
- @Override
- public void mousePressed(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseReleased(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseEntered(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- @Override
- public void mouseExited(MouseEvent e) {
- // TODO Auto-generated method stub
- }
- }
Function.java
- import java.awt.*;
- import javax.swing.table.DefaultTableModel;
- import java.awt.event.*;
- import java.sql.*;
- import javax.swing.*;
- public class Function extends JFrame implements ActionListener{
- String StuID, Stud_Name;
- String num;
- JTextField ID;
- JButton Select;
- JPanel Va, Vb;
- JTable ival;
- JScrollPane qval;
- DefaultTableModel rval;
- JLabel label;
- static Connection ct;
- PreparedStatement ps;
- ResultSet rs;
- //Connect connect = new Connect();
- //学生登录界面
- public void StudentShow() {
- Icon v1 = new ImageIcon("p3.png");
- Va=new JPanel();
- label=new JLabel();
- label.setIcon(v1);
- label.setText("学号");
- ID = new JTextField(15);
- Select=new JButton("查询");
- Select.addActionListener(this);
- //界面表格名添加
- String[] colnames = { "学号","姓名", "学院", "Java", "Python", "数据结构"};
- rval = new DefaultTableModel(colnames, 3);
- ival = new JTable(rval);
- qval = new JScrollPane(ival);
- Va = new JPanel();
- Vb = new JPanel();
- Va.add(label);
- Va.add(ID);
- Va.add(Select);
- Vb.add(qval);
- //查询位置调整
- this.add(Va,BorderLayout.SOUTH);
- this.add(Vb);
- //界面属性设置
- this.setLocationRelativeTo(null); //居中
- this.setVisible(true);
- this.setSize(500,600);
- this.setDefaultCloseOperation(DISPOSE_ON_CLOSE);
- this.setTitle("学生管理系统");
- }
- //学生登录判断
- public void Student(String StudentAccount, String StudentPassWord,JTextField te1, JPasswordField te2, JFrame frame, Function hua)
- {
- if(StudentAccount.equals(te1.getText())&&StudentPassWord.equals(te2.getText()))
- {
- JOptionPane.showMessageDialog(this, "登录成功!");
- frame.setVisible(false);//窗口不可见
- hua.StudentShow();//调用一个画板对象中的函数 弹出一个界面
- }else if(te1.getText().isEmpty()&&te2.getText().isEmpty())
- {
- JOptionPane.showMessageDialog(this, "请输入账号或密码");
- }else if(te1.getText().isEmpty())
- {
- JOptionPane.showMessageDialog(this,"请输入用户名!");
- }else if(te2.getText().isEmpty())
- {
- JOptionPane.showMessageDialog(this,"请输入密码!");
- }else
- {
- JOptionPane.showMessageDialog(this,"<html>账户或密码错误!!!<br>请重新输入</html>","错误",JOptionPane.ERROR_MESSAGE);
- //清空输入框
- Clear(te1, te2);
- }
- }
- //清空文本框和密码框
- public void Clear(JTextField te1, JPasswordField te2) {
- te1.setText("");
- te2.setText("");
- }
- //清空密码
- public void aClear(JPasswordField te2)
- {
- te2.setText("");
- }
- public void bClear(JTextField te3)
- {
- te3.setText("");
- }
- public class ButtonListener implements java.awt.event.ActionListener{ //实现ActionListener 接口 implement
- JTextField te1=new JTextField(); //传参
- JPasswordField te2=new JPasswordField();
- Function hua=new Function(); //一个画板对象
- ButtonListener(JTextField te1,JPasswordField te2) {//重载 窗体上的账号框,密码框传到监听上来
- this.te1=te1;
- this.te2=te2;
- }
- public ButtonListener(JTextField ID) {
- // TODO Auto-generated constructor stub
- }
- @Override
- public void actionPerformed(ActionEvent e) {
- // TODO Auto-generated method stub
- }
- }
- public void actionPerformed(ActionEvent ch) {
- if(ch.getActionCommand()=="查询")
- {
- Connect.ConnectSQL();//连接数据库
- Connect.GetStudeInfor(ID.getText());//获取ID
- ID.setText("");
- ival.setValueAt(Connect.sID, 0, 0);
- ival.setValueAt(Connect.sname, 0, 1);
- ival.setValueAt(Connect.Dept, 0 , 2);
- ival.setValueAt(Connect.Java, 0, 3);
- ival.setValueAt(Connect.Python, 0, 4);
- ival.setValueAt(Connect.DataStructure, 0, 5);
- }
- }
- }
Connect.java
- import java.sql.Connection;
- import java.sql.PreparedStatement;
- import java.sql.DriverManager;
- import java.sql.ResultSet;
- import java.sql.SQLException;
- import java.sql.Statement;
- import javax.swing.JOptionPane;
- import java.awt.Cursor;
- public class Connect {
- static String sID, sname, Dept, Java, Python, DataStructure;
- static Connection Co;
- static PreparedStatement nValue;
- static ResultSet ResultInfor;
- static Statement ST;
- //数据库连接函数
- public static void ConnectSQL() {
- String url = "jdbc:sqlserver://localhost:1433;DatabaseName=master;";//master是自己储存数据的数据库名
- try {
- // 连接数据库
- Co = DriverManager.getConnection(url, "sa", "biubiubiu");//sa是SQL账号,后面是密码
- // 建立Statement对象
- ST = Co.createStatement();
- } catch (SQLException e) {
- e.printStackTrace();
- JOptionPane.showMessageDialog(null,"<html>数据库连接错误!!!<br>请联系管理员修复。</html>","错误",JOptionPane.ERROR_MESSAGE);
- }
- }
- public static void GetStudeInfor(String Str) {
- try {
- // 给?赋值,防止SQL注入,
- String sql = "select * from Infor where Stud_ID = ?";
- nValue = Co.prepareStatement(sql);
- nValue.setString(1, Str);
- ResultInfor = nValue.executeQuery();
- if(ResultInfor.next())
- {
- //获取学生信息
- sID = ResultInfor.getString("Stud_ID");
- sname = ResultInfor.getString("Stud_Name");
- Dept = ResultInfor.getString("Stud_Dept");
- Java = ResultInfor.getString("JavaGrade");
- Python = ResultInfor.getString("PythonGrade");
- DataStructure = ResultInfor.getString("DataStructureGrade");
- JOptionPane.showMessageDialog(null, "查询成功!");
- }else
- {
- JOptionPane.showMessageDialog(null, "没有此学生!");
- }
- } catch (Exception e1) {
- // TODO Auto-generated catch block
- e1.printStackTrace();
- }
- }
- }
Java学生管理系统(连接数据库查询)超详细的更多相关文章
- Java学生管理系统项目案例
这是一个不错的Java学生管理系统项目案例,希望能够帮到大家的学习吧. 分代码如下 package com.student.util; import java.sql.Connection; impo ...
- Java中的三大特性 - 超详细篇
前言 大家好啊,我是汤圆,今天给大家带来的是<Java中的三大特性 - 超详细篇>,希望对大家有帮助,谢谢 这一节的内容可能有点多,大家可以选择性的来看 简介 Java的三大特性:封装.继 ...
- java学生管理系统
student类 package cn.itheima.Manag; /** * *标准类 * **/public class Student { //学号 private String id; // ...
- Java学生管理系统(IO版)
图解: cade: student.java /* * 这是我的学生类 */ public class Student { //学号 private String id; //姓名 private S ...
- Java学生管理系统(详解)
相信大部分人都有接触过这个 Java 小项目--学生管理系统,下面会分享我在做这个项目时的一些方法以及程序代码供大家参考(最后附上完整的项目代码). 首本人只是个初学Java的小白,可能项目中有许多地 ...
- bootStrap-table服务器端后台分页的使用,以及自定义搜索框的实现,前端代码到数据查询超详细讲解
关于分页,之前一直纯手写js代码来实现,最近又需要用到分页,找了好多最终确定bootstrap-table,正好前端页面用的是bootstrap. 首先下载BootStrap-table的js和CSS ...
- java学生管理系统(增、删、改、查功能)
package mm; import java.util.Scanner;import java.util.ArrayList; class Student1 { private String stu ...
- (转)Java多线程学习(吐血超详细总结)
本文转自:http://blog.csdn.net/evankaka 写在前面的话:此文只能说是java多线程的一个入门,其实Java里头线程完全可以写一本书了,但是如果最基本的你都学掌握好,又怎么能 ...
- Java并发知识总结,超详细!
首先给大家分享一个github仓库,上面放了200多本经典的计算机书籍,包括C语言.C++.Java.Python.前端.数据库.操作系统.计算机网络.数据结构和算法.机器学习.编程人生等,可以sta ...
随机推荐
- mysql存取blob类型数据
参考网址:http://www.cnblogs.com/jway1101/p/5815658.html 首先是建表语句,需要实现将表建立好. CREATE TABLE `blobtest` ( `pr ...
- Jquery 插件开发——citylinkage(省、市、县城市联动选择)
第一部分:背景 开发源于需求,本次城市联动选择插件算是我写插件的一个特例吧,不是我目前工作需要些的,算是兴趣驱使吧.之前呢,一直想写这个插件,然后错过了一个写这个插件的机会(这个得回顾到很久以前了. ...
- 关于webapi练习过程中遇到的一系列问题记录
最近在尝试本地进行webapi调用的过程中,遇到一系列的问题,demo很小但着实让人头疼,先附上demo. 前台页面,目的是展示新闻的分类: 类别模型如下: 控制器代码如下: public Actio ...
- 企业建立私有云的N个理由
简而言之,私有云意味着高效.安全.可控(技术路线是否可控另说了),也意味着高成本.有限弹性.(政绩工程不在讨论范围) 全面回答这个问题,其实包括两个部分:为什么要上云计算,以及为什么要采用私有化部署模 ...
- Ground Truth
ground truth就是参考标准,一般用来做误差量化.比方说要根据历史数据预测某一时间的温度,ground truth就是那个时间的真实温度.error就是(predicted temperatu ...
- 没固定公网 IP 的公司内网实现动态域名解析( 阿里云万网解析 )
情景说明 前段时间应公司需求,需要将内网的服务映射到公网.由于公司使用的是类似家庭宽带的线路,没有固定的公网 IP 地址,所以决定使用域名来完成. 当时有几种方案: 1.花生壳:但是目前需要乱七八糟的 ...
- [SinGuLaRiTy] 2017-07-22 NOIP2017 模拟赛
[SInGuLaRiTy-1029] Copyright (c) SinGuLaRiTy 2017. All Rights Reserved. <全是看看代码就会的水题,偷个懒不单独写题解了~& ...
- QueryTask,FindTask,IdentifyTask三种查询的区别
1:QueryTask是一个进行空间和属性查询的功能类,它可以在某个地图服务的某个子图层内进行查询,顺便需要提一下的是,QueryTask进行查询的地图服务并不必项加载到Map中进行显示.QueryT ...
- join与os.path.join
Python中有join和os.path.join()两个函数,具体作用如下: join:连接字符串数组.将字符串.元组.列表中的元素以指定的字符(分隔符)连接生成一个新的字符串os.path.joi ...
- 复习一知识点:回调函数callback
比如我们常用的异步请求: $.ajax({ url:"test.json", type: "GET", data: {username:$("#use ...