2016-11-08 58 views
0

我想從兩個不同的表中調用兩組數據以顯示在JTextArea(jtaDisplay)中。第一張表(emp_db)將獲得員工編號,姓名和姓氏。第二張表(sec_clearance)將獲得員工安全許可級別。雖然ResultSet未執行?

該方法被放置在構造函數中,所以它會在框架啓動時執行,但是每當我運行框架時它都不會顯示數據。沒有錯誤消息出現,並且堆棧跟蹤不顯示任何錯誤消息。

我在方法內的不同位置放置了一個JOptionPane,以查看問題出在哪裏,並發現while(rs.next())語句未執行,因爲JOptionPane顯示在while語句之外,但不在其中。

下面是代碼我目前有:

try 
     { 
      String user = txtEmpTitle.getText(); 
      String encuser = encrypt(user); //encrypting employee number with AES to read in database 
      String getEmpNum = "Select * from emp_db where emp_num = '" + encuser + "'"; 
      String getSecLevel = "select secLevel from sec_clearance where emp_num = '" + encuser + "'"; 
      Class.forName("com.mysql.jdbc.Driver"); 
      Connection conn = (Connection) 
        DriverManager.getConnection("jdbc:mysql://localhost:3306/employee_database","root","pass123"); 
      Statement stmt=conn.createStatement(); 
      Statement stmt2=conn.createStatement(); 
      ResultSet rs = stmt.executeQuery(getEmpNum); 
      ResultSet rs2 = stmt2.executeQuery(getSecLevel); 

      while(rs.next() && rs2.next()) 
      { 
       String empNum = rs.getString("emp_num"); 
       String empName = rs.getString("fname"); 
       String empSname = rs.getString("sname"); 
       String empSecLevel = rs2.getString("secLevel"); 

       //decrypting data in database 
       String decNum = EmpEditDB.decrypt(empNum); 
       String decName = EmpEditDB.decrypt(empName); 
       String decSname = EmpEditDB.decrypt(empSname); 
       String decSecLevel = EmpEditDB.decrypt(empSecLevel); 

       jtaDisplay.setText("Employee number: " + decNum + 
         "\nEmployee name: " + decName + " " + decSname + 
         "\nSecurity clearance: " + decSecLevel); 
      } 

     } 
     catch(Exception e) 
     { 
      JOptionPane.showMessageDialog(this, e); 
     } 

我怎樣才能獲得代碼while語句執行和顯示數據中的JTextArea?

+0

這是什麼線程運行?取決於此,使用揮杆組件顯示消息可能會或可能無法正常工作。事實上,你可能會吠叫錯誤的樹,因爲代碼可能正在執行,但是gui沒有被更新!爲什麼不使用簡單的println? – e4c5

+0

這和.. [標籤:鞦韆]有什麼關係?是的,我知道代碼顯示給Swing組件,但這似乎與實際問題無關。另外,不要爲IDE添加標籤 - 這只是針對IDE的問題或有關IDE的問題! –

+0

順便說一下,''jtaDisplay.setText'應該可能是'jtaDisplay.append',但是,這似乎並不是問題的根源。爲了儘快提供更好的幫助,請發佈[MCVE]或[簡短,獨立,正確的示例](http://www.sscce.org/)。 –

回答

0

只有當你有記錄,它會進入while循環。使用preparedstatement進行動態值設置。爲了調試目的,嘗試在調試時打印查詢並複製查詢並在sql工具中執行以檢查是否有記錄。

+0

數據庫中有記錄,我剛剛嘗試使用準備好的語句,正如您所建議的,它仍然無效。我確實嘗試了在調試中打印我的查詢,但發現空白 – Osiris93