2012-03-05 3 views
0

私はクエリを持っています。私はデータベースを持っており、コードを書こうとしているので、データベース内のレコードをJavaソフトウェアから作成することができます。java sqlクエリ

私は、データベースに接続するコネクタクラスを持っています。次に、ユーザーが2つのテキストフィールドに値を入力できるようにするregisterStudentクラスがあります。値を使用してデータベース表にレコードを作成する必要があります。

私はそれが私にこのエラーコード与え送信ボタンを打ったとき: - :

import java.awt.Component; 
import java.awt.EventQueue; 
import javax.swing.JFrame; 
import javax.swing.JPanel; 
import javax.swing.border.Border; 
import javax.swing.border.LineBorder; 
import javax.swing.JLabel; 
import java.awt.Font; 
import javax.swing.JTextField; 
import javax.swing.JButton; 
import javax.swing.JOptionPane; 
import java.awt.event.ActionListener; 
import java.awt.event.ActionEvent; 
import java.sql.SQLException; 


public class RegisterStudent 
{ 

    public RegisterStudent() { 
     initialize(); 
    } 

    public JFrame frmRegisterStudent; 

    Connector con; 
    private JTextField textField_1; 
    private JTextField textField_2; 

    // initialise the frame 
    private void initialize() { 
     frmRegisterStudent = new JFrame(); 
     frmRegisterStudent.setTitle("LEC AdminPro: RegisterStudents"); 
     frmRegisterStudent.setBounds(100, 100, 413, 225); 
     frmRegisterStudent.setDefaultCloseOperation(JFrame.HIDE_ON_CLOSE); 
     frmRegisterStudent.setLocationRelativeTo(null); 


     Border border = LineBorder.createGrayLineBorder(); 
     frmRegisterStudent.getContentPane().setLayout(null); 
     con = new Connector(); 

     JPanel panel_1 = new JPanel(); 
     panel_1.setBounds(0, 0, 397, 189); 
     frmRegisterStudent.getContentPane().add(panel_1); 
     panel_1.setBorder(border); 
     panel_1.setLayout(null); 

     JLabel lblRegister = new JLabel("Register Student"); 
     lblRegister.setFont(new Font("Tahoma", Font.BOLD, 12)); 
     lblRegister.setBounds(10, 11, 124, 20); 
     panel_1.add(lblRegister); 

     JLabel lblSurname = new JLabel("Name"); 
     lblSurname.setFont(new Font("Arial", Font.PLAIN, 11)); 
     lblSurname.setBounds(10, 63, 69, 14); 
     panel_1.add(lblSurname); 

     JLabel lblDob = new JLabel("Profession"); 
     lblDob.setFont(new Font("Arial", Font.PLAIN, 11)); 
     lblDob.setBounds(10, 88, 69, 14); 
     panel_1.add(lblDob); 

     textField_1 = new JTextField(); 
     textField_1.setColumns(10); 
     textField_1.setBounds(104, 63, 266, 20); 
     panel_1.add(textField_1); 

     textField_2 = new JTextField(); 
     textField_2.setColumns(10); 
     textField_2.setBounds(104, 88, 266, 20); 
     panel_1.add(textField_2); 


     JButton btnNewButton = new JButton("Cancel"); 
     btnNewButton.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 
       Object[] options = {"Yes", "No"}; 
       Component form = null; 
       int n = JOptionPane.showOptionDialog(form, "Would you like to cancel the new Registration?", "Exit Confirmation", JOptionPane.YES_NO_CANCEL_OPTION, JOptionPane.QUESTION_MESSAGE, null, options, options); 
       if(n == JOptionPane.YES_OPTION) { 
       frmRegisterStudent.setVisible(false); 
      } 

     } 
     }); 
     btnNewButton.setBounds(280, 119, 89, 23); 
     panel_1.add(btnNewButton); 

     JButton button = new JButton("Submit"); 
     button.addActionListener(new ActionListener() { 
      public void actionPerformed(ActionEvent arg0) { 


      String name = textField_1.getText();  
      String profession = textField_1.getText(); 


       try { 
      con.stmt.executeUpdate("INSERT INTO staff (Name, Profession)"+"VALUES"+"("+"'"+name+"',"+"'"+profession+"')"); 
      JOptionPane.showMessageDialog(frmRegisterStudent, "New Record has been added"); 

      } catch (SQLException e) { 
      System.out.println("Record couldn't be added!"); 
      e.printStackTrace(); 
      } 
      } 
      }); 



     button.setBounds(181, 119, 89, 23); 
     panel_1.add(button); 


    } 




    public static void main(String[] args) { 
     EventQueue.invokeLater(new Runnable() { 

      public void run() { 
        try { 
       RegisterStudent window = new RegisterStudent(); 
       window.frmRegisterStudent.setVisible(true); 
       } catch (Exception e) { 
       e.printStackTrace(); 
       } 
      } 
     }); 

     public void setVisible(boolean b) { 
     frmRegisterStudent.setVisible(true); 

}  
} 
FYI

Exception in thread "AWT-EventQueue-0" java.lang.NullPointerException 
at RegisterStudent$2.actionPerformed(RegisterStudent.java:99) 

con.stmt.executeUpdate("INSERT INTO staff (Name, Profession)"+"VALUES"+"("+"'"+name+"',"+"'"+profession+"')"); 

これはregisterStudentクラスの私のコードです= 99行のコードを

+0

おそらく 'のでcon.stmt'はnullです。あなたは 'Connector'クラスで何を持っていますか? –

+0

コネクタの構造が 'stmt'フィールドをどうにか初期化していますか? –

+0

stmt = queryConnection.createStatement(); – Adrian

答えて

0

Connectorクラスの問題は、stmtフィールドは初期化されません。 NullPointerExceptionが

con.stmt = con.conn.prepareStatement("insert into staff (name, profession) values (?, ?)"); 
con.stmt.setString(1, name); 
con.stmt.setString(2, profession); 
con.stmt.executeUpdate(); 

しかし、この代わりに、行の

使用すると、これはかなり悪いデザインがあることに注意してください。

+0

、私はPreparedStatement stmtを得ました。 –

+0

@ピタ:フィールドを宣言しましたが、初期化していません。これを反映する答えを変えるでしょう。 –

0

コネクタがヌルですか? stmtがコネクタのフィールドであることがわかります。初期化しましたか? ところで、プリペアドステートメントを使用する方が、文字列をエスケープするため(たとえば、「 '」がある場合など)、あなたのケースでははるかに優れています。

PreparedStatement pstmt = connection.prepareStatement("insert into staff (name, profession) values (?, ?)"); 
pstmt.setString(1, name); 
pstmt.setString(2, profession); 
pstmt.executeUpdate(); 
+0

コネクタにヌルがあります。あなたはどのようにクラスを初期化しますか?準備されたステートメントを使ってどういうことを意味しますか?準備されたステートメントで私のコードの例を私に見せてくれますか?多くの感謝 –

+0

これは、準備されたステートメントサンプルです。 –

+0

ありがとうございます。あなたはまた、私はコネクタを初期化する必要があることを繰り返すことができますか? –