学生信息系统界面的实现 - JDBC

writer:pprp

登录界面的实现:

分为两个部分:

1、LoginFrame.java :

用windowbuilder进行快速搭建界面,构建好登录的界面,并用LogConnection类构建对象,进行处理,增加监听器。

2、LogConnection.java:

用基本的JDBC步骤进行处理,其中多加了一个判断用户名和密码匹配问题。

注意的问题:

1、只有在ResultSet对象使用完毕以后才能关掉Connection对象,否则会影响数据的传输,最后将连接关闭。

2、另外要注意在使用ResultSet进行结果查询的时候,需要加入一个判断,if(!rs.next())return ;否则会报错。

3、注意close函数应该在LogConnection中写,在LoginFrame的监听器中调用关闭。

LoginFrame.java

package work2;

import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; 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.JTextField;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder; import work3.StudentFrame; @SuppressWarnings("serial")
public class LoginFrame extends JFrame { private JPanel contentPane;
private JTextField userFiled;
private JPasswordField pwd;
private LogConnection lc = null; public static void main(String[] args) {
try {
UIManager
.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch (Exception e) {
e.printStackTrace();
}
LoginFrame frame = new LoginFrame();
frame.setVisible(true);
} public LoginFrame() {
setTitle("学生信息管理系统");
lc = new LogConnection();
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null); JLabel lblNewLabel = new JLabel("\u7528\u6237\u540D\uFF1A");
lblNewLabel.setBounds(63, 68, 54, 15);
contentPane.add(lblNewLabel); JLabel lblNewLabel_1 = new JLabel("\u5BC6 \u7801\uFF1A");
lblNewLabel_1.setBounds(63, 128, 54, 15);
contentPane.add(lblNewLabel_1); userFiled = new JTextField();
userFiled.setBounds(127, 65, 224, 23);
contentPane.add(userFiled);
// userFiled.setColumns(10); pwd = new JPasswordField();
pwd.setBounds(127, 124, 224, 23);
contentPane.add(pwd); JButton loginBtn = new JButton("\u786E\u5B9A");
loginBtn.setBounds(63, 204, 93, 23);
contentPane.add(loginBtn); JButton cancelBtn = new JButton("\u53D6\u6D88");
cancelBtn.setBounds(268, 204, 93, 23);
contentPane.add(cancelBtn); loginBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String name = userFiled.getText().trim();
String pwdText = String.valueOf(pwd.getPassword()).trim();
if (lc.Judge(name, pwdText)) {
JOptionPane.showMessageDialog(LoginFrame.this, "欢迎您,"
+ name);
@SuppressWarnings("unused")
StudentFrame tmp = new StudentFrame();
tmp.setVisible(true);
} else {
JOptionPane.showMessageDialog(LoginFrame.this, "用 户名或密码错误");
}
} });
cancelBtn.addActionListener(new ActionListener() { @Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.exit(0);
lc.close();
} });
JOptionPane.showMessageDialog(LoginFrame.this, "欢迎登陆学生信息管理系统,请输入账号密码");
}
}

LogConnection.java

package work2;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class LogConnection {
Connection con = null;
Statement sql = null; public LogConnection() {
// 1 drive
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("驱动加载成功");
} catch (ClassNotFoundException e) {
System.out.println("驱动加载失败");
e.printStackTrace();
}
// 2 connect String url = "jdbc:mysql://localhost/test?useSSL=true";
String user = "root";
String password = "root";
try {
con = DriverManager.getConnection(url, user, password);
System.out.println("链接成功");
} catch (SQLException e) {
System.out.println("链接失败");
e.printStackTrace();
}
// 3 statement object
try {
sql = con.createStatement();
System.out.println("成功生成statement对象");
} catch (SQLException e) {
System.out.println("生成statement对象失败");
e.printStackTrace();
} } public boolean Judge(String name, String passwd) {
ResultSet rs = null;
String str = "select * from log where logname = '" + name + "'";
try {
rs = sql.executeQuery(str);
if (!rs.next())
return false;
} catch (SQLException e) {
e.printStackTrace();
return false;
}
try {
String cmpPwd = rs.getString(3);
if (cmpPwd.equals(passwd))
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return false;
}
public void close(){
try {
con.close();
System.out.println("关闭成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
System.out.println("关闭失败");
}
}
}

查询界面的实现:

要求:

设计学生信息管理系统。

使用Navicat的test数据库,创建Student表,包含学生的学号、姓名、年龄信息。根据以下的功能,编写相应的函数:

① 根据学号,可以查询到学生的姓名和年龄;

② 给定学生的学号、姓名、年龄,在表中追加一行信息;

③ 给定学生的学号,可以从表中删除该学生的信息;

使用图形界面实现任务三的学生信息管理系统设计。

分析:

用到上一个部分的登录界面,在登录界面的ActionListener中处理,如果成功登录,则打开查询、更新、删除界面进行操作。

Student.java: 其中是关于JDBC编程内容,为三个需求设计了三个函数,分别实现三个功能要求。

StudentFrame.java: 界面的设计,为四个按钮注册监听器,综合实现三种功能。

知识点:

1、用到的SQL语句比较多,要注意使用的时候需要在适当的时候加双引号,例如:

"insert into Student(sname,age)

values('"+name+"',"+age+")"

其中name和age都是变量。

2、注意数据库中编号是从1开始的,不是从0开始。

3、executeUpdate语句:是执行增删改的操作。

executeQuery语句:是执行查询操作的。

StudentFrame.java

package work3;

import java.awt.Color;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener; import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JTextField;
import javax.swing.UIManager;
import javax.swing.border.EmptyBorder; import work2.LoginFrame; @SuppressWarnings("serial")
public class StudentFrame extends JFrame { private JPanel contentPane;
private JTextField searchStuNo;
private JTextField NameTextField;
private JTextField AgeTextField;
LoginFrame lf = null;
Student stu = null; public static void main(String[] args) {
try {
UIManager.setLookAndFeel("com.sun.java.swing.plaf.windows.WindowsLookAndFeel");
} catch(Exception e){
e.printStackTrace();
}
StudentFrame frame = new StudentFrame();
frame.setVisible(true);
} public StudentFrame() {
stu = new Student(); setTitle("学生信息查询系统");
setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
setBounds(100, 100, 450, 300);
contentPane = new JPanel();
contentPane.setBorder(new EmptyBorder(5, 5, 5, 5));
setContentPane(contentPane);
contentPane.setLayout(null);
contentPane.setBackground(Color.PINK); JLabel label = new JLabel("\u67E5\u8BE2\u7684\u5B66\u53F7\uFF1A");
label.setBounds(25, 29, 100, 27);
contentPane.add(label); searchStuNo = new JTextField();
searchStuNo.setBounds(135, 32, 218, 24);
contentPane.add(searchStuNo);
searchStuNo.setColumns(10); JButton SearchBtn = new JButton("\u67E5\u8BE2");
SearchBtn.setBounds(94, 66, 77, 23);
contentPane.add(SearchBtn); JButton DeleteBtn = new JButton("\u5220\u9664");
DeleteBtn.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent arg0) {
}
});
DeleteBtn.setBounds(276, 66, 77, 23);
contentPane.add(DeleteBtn); JLabel label_1 = new JLabel(
"\u52A0\u5165\u5B66\u751F\u4FE1\u606F\uFF1A");
label_1.setBounds(25, 138, 100, 37);
contentPane.add(label_1); NameTextField = new JTextField();
NameTextField.setBounds(177, 146, 58, 21);
contentPane.add(NameTextField);
NameTextField.setColumns(10); AgeTextField = new JTextField();
AgeTextField.setBounds(286, 146, 58, 21);
contentPane.add(AgeTextField);
AgeTextField.setColumns(10); JLabel label_2 = new JLabel("\u59D3\u540D:");
label_2.setBounds(135, 149, 36, 15);
contentPane.add(label_2); JLabel label_3 = new JLabel("\u5E74\u9F84:");
label_3.setBounds(251, 149, 54, 15);
contentPane.add(label_3); JButton SureBtn = new JButton("\u786E\u5B9A");
SureBtn.setBounds(94, 203, 77, 23);
contentPane.add(SureBtn); JButton ExitBtn = new JButton("\u9000\u51FA");
ExitBtn.setBounds(276, 203, 77, 23);
contentPane.add(ExitBtn); SearchBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
int ssno = Integer.parseInt(searchStuNo.getText());
String tmp = stu.selectNameAge(ssno);
JOptionPane.showMessageDialog(StudentFrame.this, tmp);
searchStuNo.setText("");
}
});
DeleteBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
int ssno = Integer.parseInt(searchStuNo.getText());
if(stu.DeleteInf(ssno)){
JOptionPane.showMessageDialog(StudentFrame.this, "删除成功!");
}else {
JOptionPane.showMessageDialog(StudentFrame.this, "删除失败!");
}
searchStuNo.setText("");
}
}); ExitBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
System.exit(0);
}
});
SureBtn.addActionListener(new ActionListener() {
@Override
public void actionPerformed(ActionEvent arg0) {
// TODO Auto-generated method stub
String ssname = NameTextField.getText();
int sage = Integer.parseInt(AgeTextField.getText());
stu.add(ssname,sage);
NameTextField.setText("");
AgeTextField.setText("");
JOptionPane.showMessageDialog(StudentFrame.this, "插入成功!");
}
});
}
}

Student.java

package work3;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class Student {
Connection con = null;
Statement sql = null;
ResultSet rs = null; public Student() {
// 1 drive
try {
Class.forName("com.mysql.jdbc.Driver");
System.out.println("驱动加载成功");
} catch (ClassNotFoundException e) {
System.out.println("驱动加载失败");
e.printStackTrace();
}
// 2 connect
String url = "jdbc:mysql://localhost/test?useSSL=true";
String user = "root";
String password = "root";
try {
con = DriverManager.getConnection(url, user, password);
System.out.println("链接成功");
} catch (SQLException e) {
System.out.println("链接失败");
e.printStackTrace();
}
// 3 statement object
try {
sql = con.createStatement();
System.out.println("成功生成statement对象");
} catch (SQLException e) {
System.out.println("生成statement对象失败");
e.printStackTrace();
}
} public String selectNameAge(int sno){ String sqls = "select sname,age from student where sno = '"+String.valueOf(sno)+"'";
try {
rs = sql.executeQuery(sqls);
if(!rs.next()){
return ("不存在!");
}
System.out.println("查询成功");
String stuname = rs.getString(1);
int stuage = rs.getInt(2);
return ("学号为"+sno+"的学生的姓名为:"+stuname+" ,年龄为:" + stuage);
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("查询失败");
e.printStackTrace();
}
return "不存在";
} public void add(String name,int age){
String str = "insert into Student(sname,age) values('"+name+"',"+age+")";
try {
sql.executeUpdate(str);
System.out.println("插入成功");
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("插入失败");
e.printStackTrace();
}
} public boolean DeleteInf(int no){
String str = "delete from Student where sno = "+no+"";
try {
sql.executeUpdate(str);
System.out.println("删除成功");
return true;
} catch (SQLException e) {
// TODO Auto-generated catch block
System.out.println("删除失败");
e.printStackTrace();
}
return false;
}
}
如果感觉有帮助,请点个赞

nwafu - java实习 JDBC练习 - 学生信息系统界面的更多相关文章

  1. Java使用JDBC连接SQL Server数据库|实现学生成绩信息系统

    Java实验四 JDBC 使用SQL Server数据库或者MySQL数据库各自的客户端工具,完成如下任务: (1)创建数据库students: (2)在数据students中创建表scores,包括 ...

  2. Java程序设计——学生信息系统

    1.团队课程设计博客链接 http://www.cnblogs.com/YYYYYYY/p/7065278.html 2.个人负责模块说明 2.1 管理界面 2.2 清空:单击清空键,可清空数据栏 2 ...

  3. Java使用JDBC连接SQL Server数据库

    Java使用JDBC连接SQL Server数据库 1.下载驱动 1.下载Microsoft SQL Server JDBC 驱动程序 https://docs.microsoft.com/zh-cn ...

  4. 最近找java实习面试被问到的东西总结(Java方向)

    时间,就是这么很悄悄的溜走了将近两个年华,不知不觉的,研二了,作为一个一般学校的研究生,不知道该说自己是不学无术,还是说有过努力,反正,这两年里,有过坚持,有过堕落,这不,突然间,有种开窍的急迫感,寻 ...

  5. Java课设(学生信息管理系统)

    1.团队课程设计博客链接 http://www.cnblogs.com/Min21/p/7064093.html 2.个人负责模板或任务说明 设计登陆界面和学生信息界面的设计,学生信息的显示.退出等功 ...

  6. 广州三本找Java实习经历

    前言 只有光头才能变强 这阵子跑去面试Java实习生啦~~~我来简单介绍一下背景吧. 广州三本大三在读,在广州找实习.大学开始接触编程,一个非常平庸的人. 在学习编程时,跟我类似的人应该会有一个疑问: ...

  7. java用JDBC连接MySQL数据库的详细知识点

    想实现java用JDBC连接MySQL数据库.需要有几个准备工作: 1.下载Connector/J的库文件,下载Connector/J的官网地址:http://www.mysql.com/downlo ...

  8. 使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网)

    使用Java语言编写一个五子棋UI界面并实现网络对战功能(非局域网) 一,前期准备 1,Java IDE(Eclipse)与JDK的安装与配置jdk-15.0.1-免配置路径版提取码:earu免安装版 ...

  9. Java的JDBC操作

    Java的JDBC操作 [TOC] 1.JDBC入门 1.1.什么是JDBC JDBC从物理结构上来说就是java语言访问数据库的一套接口集合,本质上是java语言根数据库之间的协议.JDBC提供一组 ...

随机推荐

  1. Android 关于异步Http请求,以及编码问题

    大家都知道可以使用一个继承了AsyncTask的类去实现异步操作,再有个Http请求的类就可以解决了,现在我说下里面的细节问题,比如长时间无反应,编码问题,以及一些HTML相关的处理. 首先说下长时间 ...

  2. Yii框架2.0的Gii

    Yii框架的Gii在我看来算是个快速创建器,当然对于学习来说意义不大,但对于已经懂得他的原理并用他开发的话,就是个快速开发的好工具. 他能快速的创建控制器,模块,crup,插件,Module. 打开g ...

  3. Tomcat 下 mysql的连接池配置和使用

    最近维护的一个项目出了问题,最后分析是卡在数据库连接池上,然后就做了些学习. 先把我自己的方法写出来,再说下网上其他的没有成功的方法. 1.首先当然是先把mysql的jar包放在lib目录下,tonc ...

  4. How many---hdu2609(最小表示)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2609 给你n个01串,然后求这n个串中有几个不同的: 例如:1100 ,1001 ,0011 ,011 ...

  5. AndroidStudio修改常用快捷键

    近期公司开发工具要从eclipse转向Androidstudio,安装好as后当然迫不及待地要将快捷键修改为eclipse中的快捷键啦,下面是个人的一些小的总结. 1.首先当然要打开快捷键的设置界面啦 ...

  6. 爬虫之FileCookieJar

    简介 虽然CookieJar模块能够做到给请求设置cookie,但是它的cookie是保存在内存里的,每次用都需要重新设置, 这就衍生了一个它的子类---FileCookieJar,它可以将cooki ...

  7. MySQL之备份恢复

    1.备份的种类 逻辑备份:SQL语句的备份 物理备份:数据页备份 2.逻辑备份工具介绍 select xxxx from t1 into outfile '/tmp/redis.txt' mysql ...

  8. libxml2 在mingw中 xmlfree连接错误问题

    libxml2 在mingw中 xmlfree连接错误问题 2013年10月02日 ⁄ 综合 ⁄ 共 1527字 ⁄ 字号 小 中 大 ⁄ 评论关闭 原地址:http://blog.csdn.net/ ...

  9. 实现:左边为菜单导航,当一个菜单中包含多个Tabs,并且不同的Tab要根据权限的不同显示。

    1.前台代码 //当点击左侧菜单时,将访问Controller中的Home方法,这样就会根据用户权限的不同,通过后台的判断来决定显示的页面<li class="@(ViewBag.Se ...

  10. 145. Binary Tree Postorder Traversal(二叉树后序遍历)

    Given a binary tree, return the postorder traversal of its nodes' values. For example:Given binary t ...