开发Java数据库应用程序,该程序针对教材数据库ST及其三个表STUDENT、COURSE、SC进行数据的增删改查操作。程序功能具体包括(假设数据库及表都已经创建完毕):
(1)程序启动;
(2)提示输入用户名和密码;
(3)显示如下功能菜单:输入数据、删除信息、修改信息、查询信息;
(4)如果是输入信息,则显示下级菜单:输入学生档案信息、输入课程信息、输入学生修课信息;
(5)如果是删除信息,则显示下级菜单:删除学生档案信息、删除课程信息、删除学生修课信息;
(6)如果是修改信息,则显示下级菜单:修改学生档案信息、修改课程信息、修改学生修课信息;
(7)如果是查询信息,则显示下级菜单:查询学生档案信息、查询课程信息、查询学生修课信息;
(8)其中,查询信息,还要求能够:
(a)查询指定学号的学生的全部信息,包括学生表信息以及学生修课信息
(b)查询指定课程所修学生的全部信息,包括该门课程的最高成绩、最低成绩、平均成绩和及格率。
要求输入相关数据到三个表中,包括教材中三个表的数据;以表单的形式显示查询的结果。
mysql5.5,idea2018.1版,workbrench6.3
使用javaSwing进行用户界面设计,设计一个登录界面,登录成功了就进入主界面进行增删改查的操作。
@Override
public void actionPerformed(ActionEvent ae) {
String user = text1.getText();
String password = text2.getText();
if (ae.getSource() == jbutton) {
dbFunction db = new dbFunction();
boolean flag = db.Login(user, password);
if (!flag)
JOptionPane.showMessageDialog(this, "登录失败!");
else {
JOptionPane.showMessageDialog(this, "登录成功!");
this.dispose(); //登录成功关闭登录界面
new mySystemJFrame();//打开我的主界面
}
}
}
public boolean Login(String user, String password) {
String url = "jdbc:mysql://localhost:3306/st";
try {
Class.forName(driver);
conn = DriverManager.getConnection(url, user, password);
conn.close();
return true;
} catch (ClassNotFoundException e) {
return false;
} catch (SQLException e) {
return false;
}
}
这里仅展示,点击按钮的时间处理。调用login函数去连接数据库,连接成功返回true,失败返回false,登录成功弹出消息框,进入主界面
关于这些图标推荐一个网站---阿里巴巴的矢量图标网站
https://www.iconfont.cn/search/index?q=%E6%95%AC%E8%AF%B7%E6%9C%9F%E5%BE%85
主页面使用菜单栏,包括输入,删除,修改,查询共四个菜单。为使图形用户界面美化,加入了透明50%的背景。点击这四个按钮出现相应的二级菜单,对于相应的操作,比如输入,则是在点击输入学生档案信息之后出现一个弹出框,按照要求填写相关信息即可,操作成功会提示成功,否则提示失败.
用户填写的信息一般是类似于 1 2 3 44的样子,将用户输入的字符串使用正则表达式进行切分,把中间的空格去掉,放入一个数组中
String[] zhw =datas.split("\\s+"); //用正则表达式对字符串切分
在后台中打印即可看到切分之后的输入语句,达到了sql语句的标准.
public JTable query(int section,String datas) throws SQLException {
String sql = "";
if(section == 10){
sql = "select Sno as 学号 ,Sname as 姓名,Ssex as 性别 ,Sage as 年龄,Sdept as 所在系 from student;";
}else if (section == 11){
sql = "select Cno as 课程号 ,Cname as 课程名 ,Cpno as 先行课 ,Ccredit as 学分 from course;";
}else if(section == 12){
sql = "select Sno as 学号 ,Cno as 课程号 ,Grade as 成绩 from sc;";
}else if(section == 13){
sql = "select distinct * from student inner join sc on sc.Sno=student.Sno where student.Sno="+datas;
}else{
sql = "SELECT Course.Cno as 课程号 ,Course.Cname as 课程名 ,Course.Cpno as 先行课 ,Course.Ccredit as 学分 ,Sc.Sno as 学号 ,max(sc.Grade) as 最高分,min(sc.Grade) as 最低分,avg(sc.Grade) as 平均分,concat(count(sc.Grade>=60)/count(sc.Grade)*100,'%') as 及格率\n" +
" FROM course inner join sc on course.Cno=sc.Cno where course.Cno="+datas;
}
conn = DriverManager.getConnection(url);
Statement stmt=conn.createStatement();
ResultSet rset = stmt.executeQuery(sql); //返回结果集ResultSet
ResultSetMetaData rsmd = rset.getMetaData(); //创建结果集元数据对象
int columns = rsmd.getColumnCount(); //获得列数
String columntitle[] = new String[columns]; //创建列名数组
for(int j=0;j
查询界面使用JTable表格制作,将查询的结果集ResultSet,ResultSetMetaData放入一个二维数组,传递给JTable,然后添加到面板上去。每次进行新的查询会先将旧的表格进行删除再放入新的JTable,关于查询使用的表格,这里上图贴出的是查询表格的函数,点击查询的处理如下图,这里有一个坑,如果说你再次点击查询,必须要先把之前的表格先删除,否则表格看上去没有,如果你点击一下界面还是会出现
try {
jtable = db.query(section,datas);
jtable.setRowHeight(30);
jtable.setFont(x);
if (this.getContentPane().getComponentCount() > 0)
this.getContentPane().remove(0);
this.getContentPane().add(new JScrollPane(jtable));
this.setVisible(true);
} catch (SQLException e1) {
e1.printStackTrace();
}
本次实验所用软件为mysql5.5,idea2018.1版,workbrench6.3
通过本次MYSQL和JAVA的实验,让我更进一步了解到数据库的重要性。
数据库是为了实现一定目的按某种规则和方法组织起来的“数据”的“集合”。数据库可以直观的理解为存放数据的仓库,只不过这个仓库是在计算机的大容量存储器上,而且数据必须按照一定的格式存放,因为它不仅需要存放,而且要便于查找。
有了JDBC,向各种关系数据发送SQL语句就是一件很容易的事。换言之,有了JDBC API,就不必为访问Sybase数据库专门写一个程序,为访问Oracle数据库又专门写一个程序,或为访问Informix数据库又编写另一个程序等等,程序员只需用JDBC API写一个程序就够了,它可向相应数据库发送SQL调用。同时,将Java语言和JDBC结合起来使程序员不必为不同的平台编写不同的应用程序,只须写一遍程序就可以让它在任何平台上运行,这也是Java语言“编写一次,处处运行”的优势。
简单地说,JDBC 可做三件事:与数据库建立连接、发送 操作数据库的语句并处理结果。
在实现这个JAVA系统中,翻阅多次JAVA实用编程一书,不仅让我学会了数据库的基本操作,也对上学期所学的JAVA程序设计有了一次较好的温习