2016-11-21 86 views
0

親愛的朋友們,我想知道如何使用rs2xml顯示結果集到jtable我知道jtablename.setmodel(dbutils.setresultsettotable(rs));但我想知道如何retriev的所有記錄,並顯示在jtablle我的代碼是如何使用rs2xml jar庫填充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(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精細它顯示所有數據現在u能告訴我如何傳遞這個數據jtable和讓你知道我什麼時候使用dbutils它也檢索列ñ名自動和我沒有在JTable中給列名手動

回答

0

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

好DBUtils創建一個單一的TableModel

但在JTable中我只獲得了最後的循環紀錄不是每一個循環記錄

你不斷用新的TableModel替換舊的TableModel。

所以,你有兩個選擇:

  1. 您需要創建多個表,每個TableModel中每個JTable中添加到幀

  2. 您需要將數據從每個TableModel的複製到主TableModel,然後將主TableModel顯示到單個JTable中。所以這意味着在循環之外創建一個只有列名和0行數據的DefaultTableModel。然後,每次循環,然後將每行數據從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); 
+0

u能請更正代碼它會幫助我很多,因爲我在Java –

+0

我有更新鮮編輯我的代碼,請閱讀我的代碼,並幫助我 –

+0

@LovePoet我們不是在這裏寫你的代碼。你通過嘗試學習。我給了你代碼可能看起來像的一般結構。因此,花點時間瞭解TableModles如何工作並填充空白的概念。 – camickr