0

私はフォームに取り組んでいます。このフォームでは、Name を使用してデータベースからレコードを取得しています。他のクラス、つまりフレームで定義されているテキストフィールドからデータを収集します。この文字列を searchData 関数に渡して、データベースからフェッチします。しかし、プログラムを実行すると、NullPoingerException for columnNames[ ] JTable 用に定義された文字列配列が返されます。クラス panelShowData のコードは次のとおりです。

   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 );            
    }
4

1 に答える 1

0

フィールド を初期化しませんでしたtableModel。したがって、行

tableModel.setColumnIdentifiers( columnName );

をトリガーしNullPointerExceptionます。

于 2013-04-23T06:55:39.440 に答える