美文网首页大学,考研,学习计算机杂谈
[数据库课设进行时]第四天 终于完工了!表格的查询是重点

[数据库课设进行时]第四天 终于完工了!表格的查询是重点

作者: 此生望尽天涯路 | 来源:发表于2018-06-14 17:36 被阅读27次

这两天遇到最困难的地方应该就是JTable部分,如何从数据库中导出数据并在表格中显示,使用的是两个向量,titlevector和studentvector. 刚开始的时候,我用的是字符串数组,结果要考虑两个字符串的对应顺序,非常繁杂.又后来,没有注意到表格的组成结构,没有把参数作为全局变量,而导致后期删除元素等操作频频出错!意识到这个问题后,昨天晚上迷迷糊糊中我想着,明天要把两个向量作为全局变量,作为面板的属性.

 Vector titilevector = null;
 Vector studentvector = null;

其中titilevector作为表格的标题,studentvector作为表格主体,其中它的元素是学生记录向量!,一定要特别注意这一点,我的同学也出现这个问题了,当然我也遇到了,如下面


当时错误的写法

哇,代码写错了!!!!在表格的studentvector中的元素应该是一条学生记录向量,而不是学号字符串,名字字符串等一波字符串!应该先创建一个向量,把这些查出来的一条学生记录信息放到向量中,在把这个向量放到studentvector中

正确的写法:

studentvector.clear();
        try {
            while(rs.next()) {
                Vector stu = new Vector();
                stu.add(rs.getString(1));
                stu.add(rs.getString(2));
                stu.add(rs.getString(3));
                stu.add(rs.getString(4));
                stu.add(rs.getString(5));
                stu.add(rs.getString(6));
                stu.add(rs.getString(7));
                studentvector.add(stu);

                //System.out.println(rs.getString(1));System.out.println(rs.getString(1));
            }
            table.updateUI();

参考资料:
java.lang.String cannot be cast to java.util.Vector
======================我是分割线========================
弄好了这两个向量,学会从数据库中导出数据并添加到studentvector中。解决这关键的一点.其余要做的就是与数据库建立连接,并执行不同的sql语句。例如下面的查询,第一天就在搞有关数据库的操作了,其中也有查询的部分,不过那个查询是范围的查询,这里要做的是按照字段的查询,有点区别的,多了【多表连接查询】部分。要用到【多表连接查询 】,是因为学生表中有关班级、院系的数据是外键,分别是班级表、院系表的主键。
【多表连接查询 】:
student.class = class.Id AND student.department = department.Id
示例代码:

String sql = "select studentID ,student.name,sex,class.name,department.name,birthday,native_place from student ,class,department where student.class = class.Id AND student.department =  department.Id";
        String item = jCBSelectQueryFieldTransfer(SelectQueryFieldStr); //得到属性列
        sql+= " and " + item;
        sql +=" = " + "'" + sQueryField + "'";
        dbProcess.connect();
        ResultSet rs = dbProcess.executeQuery(sql);

关键的地方:

  • jCBSelectQueryFieldTransfer(SelectQueryFieldStr): 由于从表中属性列得到是中文字符串,需要转换为数据库属性列的英文字符串。
    这里执行的sql语句里面的班级代码(classid)是从班级表中通过班级名得到的,同样的,院系代码(departmentid)是从院系代码表中通过院系名得到的。这样也很好的符合:查询文本框里的内容是中文字符串的情况,避免无谓的转换(以前我是用一个function进行中文和英文代码的转换)
    把outputstr = class 该为 outputstr = class.name 还有outputstr = department 该为outputStr = department.name。各个表的属性列如下:
    student表:


    学生表

    class表:


    班级表
    department表:
    院系表

代码如下:

public String jCBSelectQueryFieldTransfer(String InputStr)
    {
        String outputStr = "";
        System.out.println("jCBSelectQueryFieldTransfer(). InputStr = " + InputStr);
        
        if(InputStr.equals("学号")){
            outputStr = "studentID";
        }else if(InputStr.equals("姓名")){
            outputStr = "student.name";
        }else if(InputStr.equals("性别")){
            outputStr = "sex";
        }else if(InputStr.equals("班级")){
            outputStr = "class.name";
        }else if(InputStr.equals("院系")){
            outputStr = "department.name";
            }

查询所有结果:



按字段查询结果:


查询这块差不多了,可能有点缺陷的就是没有建立多个查询条件进行查询,像我同学说的,搞6个查询文本框,进行多条件查询,他遇到sql语句的建立问题:当有多个条件的时候,需要用and进行连接,如果是第一个条件语句,那么and就多余了,我说用一个标志位flag,初始为false,当第一个条件语句建立的时候,不加and,并且flag变为true,后面的条件的建立都加and。

还有更新、删除操作。
这些操作需要先确定一条记录,这里是通过为表格添加监听器来确定的:

table.addMouseListener(new MouseAdapter()
        { 
            public void mouseClicked(MouseEvent e) 
            { 
                int row = ((JTable) e.getSource()).rowAtPoint(e.getPoint()); // 获得行位置
                System.out.println("mouseClicked(). row = " + row);
                Vector v = new Vector();
                v = (Vector) studentvector.get(row);

                studentIDtextField.setText((String) v.get(0));// 学号
                nametextField.setText((String) v.get(1));// 姓名
                sextextField.setText((String) v.get(2));// 性别
                classtextField.setText((String)v.get(3));// 班级
                departmenttextField.setText((String) v.get(4));// 院系
                birthdaytextField_4.setText((String) v.get(5));// 出生年月
                placetextField_3.setText((String) v.get(6));
            }
        });

这里鼠标点击事件设置了每个文本框的内容,点击每行都会确定一条信息。包括学号,姓名,班级,院系,出生年月等。例如下面点击学号为2的一行记录:



比如要进行删除的话,就先通过String sNo = studentIDtextField.getText().trim();确定学号,然后进行删除。删除代码如下:

// 建立删除条件
        String sql = "delete from student where studentID = '" + sNo + "';";
        System.out.println("deleteCurrentRecordProcess(). sql = " + sql);
        try{
            if (dbProcess.executeUpdate(sql) < 1) {
                System.out.println("deleteCurrentRecordProcess(). delete database failed.");
            }
        }catch(Exception e){
            System.out.println("e = " + e);
            JOptionPane.showMessageDialog(null,
                "数据操作错误","错误",JOptionPane.ERROR_MESSAGE);
        }

其中 dbProcess.executeUpdate(sql) < 1 中具体方法如下,它返回的是一个整数,表示有多少条信息受影响。通过这个方法,我们不仅可以执行删除操作,还可以执行其他的修改操作,增加操作。只是传过的sql语句参数不同罢了。

//执行增、删、改语句的方法
    public int executeUpdate(String sql) {
        int count = 0;
        connect();
        try {
            Statement stmt = connection.createStatement();
            count = stmt.executeUpdate(sql);
        } 
        catch(SQLException ex) { 
            System.err.println(ex.getMessage());        
        }
        disconnect();
        return count;
    }

后文:

看了隔壁班的情况,我去,他们都在搞界面优化了。我反正是很苦逼的敲代码,基本上很多逻辑功能是自己实现的,虽然有的地方可能界面不是很好看,但是一点一点都是自己敲下来的。遇到问题,解决问题,反复思考,以至于同学出现错误了,很多时候都知道我知道怎么解决。后期工作就是优化界面,优化代码,精益求精吧。然后参考别人“专业”的代码,好好总结一番。这都是下周的事情了!
今晚上得准备ppt了,明天下午要做报告了!

相关文章

  • [数据库课设进行时]第四天 终于完工了!表格的查询是重点

    这两天遇到最困难的地方应该就是JTable部分,如何从数据库中导出数据并在表格中显示,使用的是两个向量,title...

  • 【数据库课设进行时】多表查询

    前文 以为很早就搞完了,但老王说还没完,需求没有满足——查询学生信息的时候,惩罚信息、奖励信息、学籍变更信息没有显...

  • c#11月13号

    上午学习使用mySQL进行表格操作,然后是数据库,command对象,SQL查询。下午练习了查询方法的使用。

  • 0081 实现图书管理系统的费用查询功能

    上节课完成了补卡管理功能。 这节课来完成费用查询功能。 编写费用查询功能 费用查询主要是针对数据库表orders进...

  • 数据库数据写入到EXCEL表格

    使用的Excel表格: 这里省略数据库查询部分代码(数据库查询到的数据放在了MAP集合中) 直接上控制器代码:说明...

  • 终于完工了

  • 终于完工了

    嗯,真的是第一次剪小女孩,一个下午终于剪完了,还正热乎,让我自我陶醉一下。

  • 终于完工了

    今天进行了期末述职,这一学期的工作总算告落。摘录片段: ​我觉得一个真正的管理者,就应是一个人性的...

  • 终于完工了

    一直都想为难读的必考名著做一份详细的资料,但都是忙忙停停,有时自己也觉得搞不下去。 前面完成了《红星照耀中国》每一...

  • 终于完工了

    经过六天的努力,参评省学科带头人的材料终于做好了,411页,装备胶装成上下两册。 省里是10日发布通知的,虽然通过...

网友评论

    本文标题:[数据库课设进行时]第四天 终于完工了!表格的查询是重点

    本文链接:https://www.haomeiwen.com/subject/zhbeeftx.html