2013-04-23 6 views
0

양식에서 작업 중입니다. 이 양식에서는 Name을 사용하여 DataBase에서 레코드를 가져옵니다. 다른 클래스, 즉 프레임에 정의 된 텍스트 필드에서 데이터를 수집합니다. 이 문자열을 데이터베이스에서 가져 오기위한 searchData 함수에 전달합니다. 하지만 프로그램을 실행할 때 columnNames []에 대한 NullPoingerException이 JTable에 대해 정의 된 문자열 배열을 제공합니다. 코드는 클래스 panelShowData에 대해 다음과 같습니다JTable의 NullPointer 예외

package addPanel; 

import java.sql.*; 
import javax.swing.*; 
import javax.swing.table.DefaultTableModel; 

public class panelShowData extends JPanel 
{ 



    Connection connection = null; 
    Statement statement = null; 
    ResultSet resultSet = null; 

    String url = "jdbc:mysql://localhost:3306/records"; 
    String driver = "com.mysql.jdbc.Driver"; 
    String userName = "root"; 
    String password = ""; 

    JScrollPane scrollPane; 
    JTable table; 
    DefaultTableModel tableModel; 

    String nameSearch=""; 

    public panelShowData() 
    { 

     this.setLayout(null); 
     setVisible(true); 
     setBounds(0, 200, 500, 450); 
    } 

    public void searchData(String nameSearch) 
    { 

      try 
      {   
       Class.forName(driver).newInstance(); 
       connection = DriverManager.getConnection(url, userName, password); 

       statement = connection.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE, 
           ResultSet.CONCUR_UPDATABLE); 


          resultSet = statement.executeQuery("select * from registration where firstname ='" 
           + nameSearch 
           + "'or lastname ='" 
           + nameSearch + "'"); 

       System.out.println("Query executed"); 
       System.out.println("nameSearch="+nameSearch); 

       String firstName; 
       String lastName; 
       int counter = 0; 
       int id; 

       JButton add=new JButton("ADD"); 

        while (resultSet.next()) 
            {       
         System.out.print(resultSet.getString(2) + "\t"); 
         System.out.print(resultSet.getString(4) + "\n"); 

         firstName = resultSet.getString(2); 
         lastName = resultSet.getString(4); 
         id = resultSet.getInt(1); 

         String[ ] columnName = { "Id","First Name", "Last Name","click" }; 
         Object[ ] data = { id, ""+firstName, "" + lastName, add }; 

         tableModel.setColumnIdentifiers(columnName); 
         tableModel.addRow(data); 
         tableModel.fireTableDataChanged(); 

         counter++; 
        } 

       table = new JTable(tableModel); 
       table.setEnabled(false); 
       scrollPane = new JScrollPane(table); 
       scrollPane.setBounds(10, 10, 350, 100); 
       scrollPane.revalidate(); 

       add(scrollPane); 
       connection.close(); 
      } 
      catch (Exception e) 
      { 
       e.printStackTrace(); 
       JOptionPane.showMessageDialog( null, "Record Not Found", 
           "Sorry", JOptionPane.ERROR_MESSAGE); 
      } 
    } 
} 

착호 방법은 다음과 같습니다

if (ae.getSource() == buttonSearch) 
    { 

     addform.setEnabled(false); 
     addform.setVisible(false); 

     remove(addform); 

     showData.revalidate(); 
     showData.repaint(); 
     add(showData); 

     String stringNameSearch=""; 

     stringNameSearch = nameSearch.getText(); 
     System.out.println("Name is"+stringNameSearch); 
     showData.searchData(stringNameSearch);    
    } 

답변

0

당신은 필드 tableModel를 초기화하지 않았다. 따라서 라인

tableModel.setColumnIdentifiers(columnName); 

NullPointerException을 트리거합니다.

+0

감사합니다 !!!! 이것은 내 문제를 해결했다. 제게 다른 것을 부탁해주세요 !! – vibhor

+0

이제 각 레코드에 대해 해당 테이블에 단추를 추가하고 싶습니다. 또한 액션 리스너를 원합니다. 그 레코드를 열어서 어떻게 위의 동일한 코드 내에서 그렇게 할 수 있습니까? – vibhor