0

亲爱的朋友我想知道如何使用 rs2xml 将结果集显示到 jtable 我知道 jtablename.setmodel(dbutils.setresultsettotable(rs)); 但我想知道如何检索所有记录并在 jtablle 中显示它们我的代码是

private void search_by_topic() throws SQLException, ClassNotFoundException {
    try
    {
        SessionFactory sf;
        Configuration cfg=new Configuration();
        System.out.println("search_by_topic me agaya");
        cfg.configure("hiber_config/hibernate.cfg.xml");
        sf=cfg.buildSessionFactory();
        Session ses=sf.openSession();
        ses.beginTransaction();
        Query qr1=ses.createQuery("from Topic where chapter_id=:chapter_id");
        qr1.setParameter("chapter_id", chap_id);
        List<Topic> topic_list=qr1.list();
        top_id=topic_list.get(jComboBox3.getSelectedIndex()).getTopic_id();
        System.out.println("Topic ID is "+top_id);
        Query qr2=ses.createQuery("from Test as t where t.import_level=:import_level and t.import_level_id=:import_level_id");
        qr2.setParameter("import_level", topicimport);
        qr2.setInteger("import_level_id",top_id);
        List<Test> test_list=qr2.list();
        //Field[] fields = null;
        System.out.println("Size of test_list is"+test_list.size());
        //Iterator<Test> itr=test_list.iterator();
        int[] test_id=new int[test_list.size()];

        for(int j=0;j<test_list.size();j++)
        {
            System.out.println("Test_List Import Wale me agaya");
            //fields=t.getClass().getDeclaredFields();    
            test_id[j]=test_list.get(j).getId();
            System.out.println("test_id: is "+test_id[j]);
        }
        System.out.println("Size of test_id array is "+test_id.length);
        for(int j=0;j<test_id.length;j++)
        {
            System.out.println("test_id now is "+j);
            int studentid=98;
            String sqlquery="SELECT ST.ID id,ST.STUDENT_ID student_id,ST.attemptNumber attempt_Number,ST.TEST_ID testId,ST.TEST_ID student_test_id,T.description description,T.test_duration test_duration,T.test_score Test_Score,ST.SCHEDULED_START_TIME_BEGIN scheduled_start_time_begin,ST.SCHEDULED_START_TIME_END scheduled_start_time_end,ST.TEST_START_DATE test_start_date,ST.LAST_ACTIVE_TIME test_last_active_time,ST.TEST_ATTEMPTED test_attempted,ST.ALLOW_VIEW_REPORT allow_view_report FROM student_test as ST,test as T WHERE ST.PAYMENT_STATUS='A' AND ST.TEST_ID = T.id AND ST.STUDENT_ID='"+studentid+"' AND ST.TEST_ATTEMPTED='0' AND T.id='"+test_id[j]+"' ORDER BY ST.ID";
            Class.forName("com.mysql.jdbc.Driver");
            java.sql.Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/school_db","root","");
            Statement pst=con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_UPDATABLE);
            rs=pst.executeQuery(sqlquery);
            System.out.println(rs.getRow());
            System.out.println(rs.toString());
            jTable1.revalidate();
            jTable1.setModel(DbUtils.resultSetToTableModel(rs));
            //jTable1.revalidate();
            /*SessionFactory sf1;
            Configuration cfg1=new Configuration();
            System.out.println("join query me agaya");
            cfg1.configure("hiber_config/hibernate.cfg.xml");
            sf1=cfg.buildSessionFactory();
            Session ses1=sf1.openSession();
            ses1.beginTransaction();
            ses1.doWork(new Work()
            {
                @Override
                public void execute(java.sql.Connection cnctn) throws SQLException 
                {
                    java.sql.PreparedStatement pst=cnctn.prepareStatement(sqlquery);
                    rs=pst.executeQuery();
                    System.out.println(rs.toString());
                }

            });
            ses1.getTransaction().commit();
        }
        ses.getTransaction().commit();
        System.out.println("Test Data Retrieved");
        ses.close();*/
        } 
}
    catch(HibernateException e)
    {
        e.printStackTrace();
    } 
}
}

我的代码在这里正常工作,我能够检索所有结果集但在 jtable 中我只得到最后一个循环记录而不是每个循环记录请帮助我

private void search_by_topic() throws SQLException, ClassNotFoundException {
        try
        {

            SessionFactory sf;
            Configuration cfg=new Configuration();
            System.out.println("search_by_topic me agaya");
            cfg.configure("hiber_config/hibernate.cfg.xml");
            sf=cfg.buildSessionFactory();
            Session ses=sf.openSession();
            ses.beginTransaction();
            Query qr1=ses.createQuery("from Topic where chapter_id=:chapter_id");
            qr1.setParameter("chapter_id", chap_id);
            List<Topic> topic_list=qr1.list();
            top_id=topic_list.get(jComboBox3.getSelectedIndex()).getTopic_id();
            System.out.println("Topic ID is "+top_id);
            Query qr2=ses.createQuery("from Test as t where t.import_level=:import_level and t.import_level_id=:import_level_id");
            qr2.setParameter("import_level", topicimport);
            qr2.setInteger("import_level_id",top_id);
            List<Test> test_list=qr2.list();
            //Field[] fields = null;
            System.out.println("Size of test_list is"+test_list.size());
            //Iterator<Test> itr=test_list.iterator();
            int[] test_id=new int[test_list.size()];

            for(int j=0;j<test_list.size();j++)
            {
                System.out.println("Test_List Import Wale me agaya");
                //fields=t.getClass().getDeclaredFields();    
                test_id[j]=test_list.get(j).getId();
                System.out.println("test_id: is "+test_id[j]);
            }
            System.out.println("Size of test_id array is "+test_id.length);
            for(int j=0;j<test_id.length;j++)
            {
                System.out.println("test_id now is "+j);
                int studentid=98;
                String sqlquery="SELECT ST.ID id,ST.STUDENT_ID student_id,ST.attemptNumber attempt_Number,ST.TEST_ID testId,ST.TEST_ID student_test_id,T.description description,T.test_duration test_duration,T.test_score Test_Score,ST.SCHEDULED_START_TIME_BEGIN scheduled_start_time_begin,ST.SCHEDULED_START_TIME_END scheduled_start_time_end,ST.TEST_START_DATE test_start_date,ST.LAST_ACTIVE_TIME test_last_active_time,ST.TEST_ATTEMPTED test_attempted,ST.ALLOW_VIEW_REPORT allow_view_report FROM student_test as ST,test as T WHERE ST.PAYMENT_STATUS='A' AND ST.TEST_ID = T.id AND ST.STUDENT_ID='"+studentid+"' AND ST.TEST_ATTEMPTED='0' AND T.id='"+test_id[j]+"' ORDER BY ST.ID";
                Class.forName("com.mysql.jdbc.Driver");
                java.sql.Connection con=DriverManager.getConnection("jdbc:mysql://localhost:3306/school_db","root","");
                Statement pst=con.createStatement();
                rs=pst.executeQuery(sqlquery);
                while(rs.next())
                {
                    //JOptionPane.showMessageDialog(null, "Table me Agaaya");
                    System.out.println("Number of rows:- "+rs.getRow());
                    System.out.println(rs.toString());
                }
            }
            ses.getTransaction().commit();
            System.out.println("Test Data Retrieved");
            ses.close(); 
    }
    catch(HibernateException e)
    {
        e.printStackTrace();
    } 
}
}

这是我的代码,它在 system.out.println 中工作正常,它现在显示所有数据你能告诉我如何在 jtable 中传递这些数据,并让你知道我何时使用 dbutils 它还会自动检索列名,我不给手动jtable中的列名

4

1 回答 1

0

我知道 jtablename.setmodel(dbutils.setresultsettotable(rs));

那么 DBUtils 创建了一个 TableModel

但是在jtable中我只得到最后一个循环记录而不是每个循环记录

你不断用新的 TableModel 替换旧的 TableModel。

所以你有两个选择:

  1. 您需要创建多个表,每个 TableModel 一个,并将每个 JTable 添加到框架

  2. 您需要将每个 TableModel 中的数据复制到主 TableModel 中,然后将主 TableModel 显示到单个 JTable 中。所以这意味着在循环之外,您可以创建一个 DefaultTableModel,其中只有列名和 0 行数据。然后,每个循环都将 DBUtils 模型中的每一行数据复制到主 TableModel。然后在循环之外使用主 TableModel 创建表。

编辑:

代码的基本结构类似于:

// Create an empty table model

String[] columnNames = {"Column1", "Column2", ...};
DefaultTableModel groupModel = new DefaultTableModel(columnNames,0);

...

// loop for all the ids

for(int j=0;j<test_id.length;j++)
{
      ... 

    // copy the data from the idc table model to the group table model

    DefaultTableModel idModel = DbUtils.resultSetToTableModel(rs);

    for (int i = 0; I < idModel.getRowCount())
    {
        Vector<Object> row = new Vector<Object>();

        for (int j = 0; j < rsModel.getColumnCount()
            row.addElement( rsModel.getValueAt(i, j); 

        groupModel.addRow( row );
    }
}

JTable table = new JTable( groupModel );
于 2016-11-21T15:54:25.453 回答