1、设计数据库
建立一个学生成绩表,表中的数据有姓名sname 、学号sno、英语成绩english、高等数学 math、计算机应用 computer、java编程 java。
建立一个账号密码表 users 和 pass 俩个属性
建表语句如下:(建库建表以及添加一条数据)
create database student
USE `student`;
DROP TABLE `t_gread`
CREATE TABLE T_gread #学生成绩表
(
sname CHAR(5) NULL,
sno CHAR(10) NOT NULL,
english CHAR(3) NULL,
math CHAR(3) NULL,
computer CHAR(3) NULL,
java CHAR(3) NULL,
PRIMARY KEY(sno)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
CREATE TABLE pass#账号密码表
(
users CHAR(10) NOT NULL,
pass CHAR(15) NOT NULL,
PRIMARY KEY (users)
)ENGINE=INNODB DEFAULT CHARSET=utf8mb4;
INSERT INTO pass VALUES('admin','123456') #设置初始账号密码
INSERT INTO t_gread (sname,sno,english,math,computer,java) VALUES ('黄月月','1825123602','80','80','87','75');#添加一条学生信息作为样例
SELECT * FROM pass;
SELECT * FROM `t_gread`
2、添加jdbc驱动包及数据库连接
参考这一篇的博文、https://blog.csdn.net/qq_44973159/article/details/91360332
连接数据库的代码异曲同工:下载驱动包直接百度即可
Java+mysql数据库
package 学生成绩系统sql;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
//定义该类用于连接到数据库
public class StudentDB {
private String driverName = "com.mysql.jdbc.Driver";
private String dbURL = "jdbc:mysql://localhost:3306/student?serverTimezone=UTC";
private Connection dbConn = null;
public PreparedStatement stmt = null;
private ResultSet rs = null;
private String user = "root";#注意数据库的账号密码
private String pass = "root";
public StudentDB() { // 构造方法调用数据库连接。一旦创建对象,数据库建立连接
this.getConnection();
}
public void getConnection() {
try {
Class.forName(driverName);
dbConn = DriverManager.getConnection(dbURL, user, pass);
System.out.println("连接数据库成功");
} catch (Exception e) {
e.printStackTrace();
System.out.print("连接失败");
}
}
public static void main(String[] args) {
StudentDB studb = new StudentDB();
studb.getConnection();
System.out.println("=====================");
public void close() { // 做完后关闭数据库操作
try {
if (rs != null) {
rs.close();
rs = null;
}
if (stmt != null) {
stmt.close();
stmt = null;
}
if (dbConn != null) {
dbConn.close();
dbConn = null;
}
} catch (SQLException e) {
e.printStackTrace();
}
}
// 增删改通用方法 insert delete update都是一个方法
public int update(String sql, Object... obj) {
int result = -1;
try {
stmt = dbConn.prepareStatement(sql);
if (obj != null) {
int len = obj.length;
for (int i = 0; i < len; i++) {
stmt.setObject(i + 1, obj[i]);
}
}
result = stmt.executeUpdate();
System.out.println("======"+result);
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}
连接成功后,参考这一篇博文,https://blog.csdn.net/qq_44973159/article/details/103532431 套用其模板。这是使用文件系统存储的学生成绩管理系统的代码
3、修改代码之前,我们还需要将数据库中用到的列名进行定义,定义在一个新的Applicant类里面。并且再get/set将其封装。
private String zhanghao; //账号
private String mima; //密码
private String name;//姓名
private String no;//学号
private String english;//英语成绩
private String math;//数学成绩
private String computer;//计算机成绩
private String java;//java成绩
4、再定义一个类javadao,在这个类当中写入数据库查询的方法,需要用到的有注册,登录,录入成绩,查询成绩,删除信息。
4.1 登录操作的sql语句
// 使用该方法查询密码,从传入账号,再返回再数据库中的密码。
public String srhpass(String user) {
StudentDB studb = new StudentDB();
String sql = "select pass from pass where users =?";
String password1 = null;
try {
ResultSet rs1 = studb.search(sql, user);
while (rs1.next()) {
password1 = rs1.getString(1);
}
rs1.close();
studb.close();
} catch (SQLException e) {
e.printStackTrace();
}
return password1;
}
public String srhuse (String user) { //加上一层保险,
StudentDB studb = new StudentDB();
String sql = "select count(*) from pass where users =?";
int count =0;//列数先设置为0
try {
//设置了账号为主键,主键值不可重复,所以count值只能为0或者1
ResultSet rs1 = studb.search(sql, user);
while (rs1.next()) {
count++;
}
rs1.close();
studb.close();
} catch (SQLException e) {
e.printStackTrace();
}
if (count==1) {
return user;
} else {
return null;
}
}
4.2 注册用户需要使用的sql语句。先导入Applicant这个类,在同一个包下面可省略。实例化studentDB,使用update方法,而插入的参数就是在Applicant传入进来的值。
// 注册用户。
public int adduse(Applicant app) {
StudentDB studb = new StudentDB();
String sql = "insert into pass values(?,?)";
Object[] obj = { app.getZhanghao(), app.getMima(),};
//打印参数,判断是否可以获取值,
System.out.println(obj[0]);System.out.println(obj[1]);
return studb.update(sql, obj);
}
4.3 再者,录入学生成绩的方法同理,
//录入学生成绩
public int addgread(Applicant app) {
StudentDB studb = new StudentDB();
String sql = "insert into t_gread values(?,?,?,?,?,?)";
Object[] obj = {app.getName(),app.getNo(),app.getEnglish(),app.getMath(),app.getComputer(),app.getJava()};
//打印参数,判断是否可以获取值,
System.out.println(obj[0]);System.out.println(obj[1]);System.out.println(obj[2]);
return studb.update(sql, obj);
}
4.3 根据输入的学号查询学生所有的信息:使用list集合对数据进行存储
public List<Applicant> srhdate(String no) {
List<Applicant> list = new LinkedList<Applicant>();
StudentDB studb = new StudentDB();
String sql = " SELECT * FROM t_gread where sno = ?";
try {
Applicant t = new Applicant();
ResultSet rs1 = studb.search(sql, no);
while (rs1.next()) {
String sname = rs1.getString(1);
String english=rs1.getString(3);
String math=rs1.getString(4);
String computer=rs1.getString(5);
String java=rs1.getString(6);
System.out.println("=======");
t.setName(sname);
t.setEnglish(english);
t.setMath(math);
t.setComputer(computer);
t.setJava(java);
list.add(t);
}
rs1.close();
studb.close();
} catch (SQLException e) {
e.printStackTrace();
}
return list;
}
最后使用main函数对方法进行测试。基本上就是调用方法进行验证,下面代码验证俩个,其余的省略。
public static void main(String[] args) {
// 测试注册的方法。
// javadao dao =new javadao();
// Applicant a =new Applicant(); //每一个测试都需要先实例化这俩个类
// a.setZhanghao("zhhs");
// a.setMima("1245");
// dao.adduse(a);
//测试录入成绩,与上面方法同理,要先实例化对象,此处省略。
// a.setName("黄三");
// a.setNo("1825123603");
// a.setEnglish("74");
// a.setMath("75");
// a.setComputer("87");
// a.setJava("85");
// dao.addgread(a);
}
//测试根据学号查询学生信息
List<Applicant> all = dao.srhdate("1825123602");
System.out.println("=====");
for (Applicant applicant : all) {
System.out.println(applicant.getName());
}
}
5,在jframe界面的修改,
5.1 登录界面 ,即MYJFrame01,修改其pd方法即可,如下图所示:类名修改成了UI
代码段如下:
System.out.println("账号"+tf.getText());//输入的账号
System.out.println("密码"+pf.getText());//输入的密码
//根据输入的账号在数据库当中查询密码
javadao jdao = new javadao();
System.out.println("javadao查询"+jdao.srhpass(tf.getText()));//返回的是数据库中的密码
String pass1 = jdao.srhpass(tf.getText());//使用变量将获取过来的密码保存下来
System.out.println("javadao查询账号"+jdao.srhuse(tf.getText()));
String zhanghao =jdao.srhuse(tf.getText());
if (tf.getText().equals(zhanghao)&&pf.getText().equals(pass1)) {//验证密码是否正确
5.2 注册界面。只需要修改save方法,throws 到SQL异常,登录的时候以及其他的IOException
都需要改成SQLEception
。如下图所示:
代码段如下:
public void save() throws SQLException {
javadao dao =new javadao();
Applicant a =new Applicant();
a.setZhanghao(tf.getText());
a.setMima(pf1.getText());
dao.adduse(a);
}
5.3 录入学生成绩,与上注册同理,修改方法即可,
代码段如下:
public void xieru() throws SQLException{
javadao dao =new javadao();
Applicant app =new Applicant();
System.out.println(tf1.getText());
System.out.println(tf2.getText());
System.out.println(tf3.getText());
System.out.println(tf4.getText());
System.out.println(tf5.getText());
System.out.println(tf6.getText());
app.setName(tf1.getText());
app.setNo(tf2.getText());
app.setEnglish(tf3.getText());
app.setMath(tf4.getText());
app.setComputer(tf5.getText());
app.setJava(tf6.getText());
dao.addgread(app);
System.out.println("写入成功!");
}
5.4 根据学号对学生信息进行查询:如下图
该方法代码如下:
public void ck() throws SQLException {
javadao dao =new javadao();
Applicant a =new Applicant();
a.setNo(tf.getText());
System.out.println("a的值:"+a);
List<Applicant> list1 = dao.srhdate(tf.getText());
System.out.println("获取a学号 1:"+ a.getNo());
System.out.println(tf.getText());
if (dao.srhno(tf.getText())==null) {
JOptionPane.showConfirmDialog(lookstu.this, "查看失败:学生信息不存在", "系统提示", JOptionPane.OK_CANCEL_OPTION,JOptionPane.CANCEL_OPTION);
new lookstu();
}else {
System.out.println("获取a学号 xianshi :"+ a.getNo());
List<Applicant> all = dao.srhdate(a.getNo());
for (Applicant applicant : all) {
System.out.println("姓名 :"+applicant.getName());
System.out.println("学号 :"+a.getNo());
System.out.println("英语 :"+applicant.getEnglish());
System.out.println("数学:"+applicant.getMath());
System.out.println("计算机 :"+applicant.getComputer());
System.out.println("Java:"+applicant.getJava());
}
new lookstu();
}
lookstu.this.dispose();
}
上述代码可进行调试,如果调试出现问题,请私信我(或者在主页有我的联系方式),将把源码发送给你。
注:看到文章的评论之后,我还是直接使用百度网盘进行分享吧,如下所示
链接: https://pan.baidu.com/s/119ICLmMakFqCmrD9gpt03g 提取码: px5x