单击AddStudent时程序冻结

问题描述

数据库(SmartData)的连接类

package smartdatabase;

/**
 *
 * @author travi
 */
import java.sql.*;//Import neccessary libraries for program

public class Conn {

    private Connection connect = null;//declare connection
    private Statement stmt = null;//declare statement
    private PreparedStatement ps = null;//declare preparedstatement

    public Conn() {//default constructor
        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            connect = DriverManager.getConnection("jdbc:derby://localhost:1527/SmartData;create=true","root","password");//establish connection
        } catch (sqlException se) {
            se.printstacktrace();
        } catch (Exception e) {
            e.printstacktrace();
        }
    }

    public ResultSet getStudents() {
        try {//try for errors

//establishing connection
            String sql;//declare string for sql command
            sql = "SELECT FirstName,Surname FROM tblStudents";//setting sql command
            stmt = connect.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,ResultSet.CONCUR_READ_ONLY);//creating statement
            stmt.executeQuery(sql);//execute statement

            ResultSet rs = stmt.getResultSet();//collect query results
            if (!rs.first()) {//checking if results are empty
                System.out.println("Empty ResultSet");//error for empty resultset
            } else {
                do {
                    String Firstname = rs.getString("Firstname");
                    String Surname = rs.getString("surname");
                    System.out.println(Firstname + "    " + Surname);//this was not for final output,only for testing purposes,which I never got past
                } while (rs.next());//while rs is not empty
            }
            return rs;//returning resultset
        } catch (sqlException se) {
            se.printstacktrace();
        } catch (Exception e) {
            e.printstacktrace();
        }
        
        return null;
    }

    public void addStudent(String fn,String sn,int kid) {//method to add new student to database
        try {//trying for errors
            String qry = "INSERT INTO TblStudents(FirstName,Surname,Kid) VALUES(?,?,?)";//setting query command
            ps = connect.prepareStatement(qry);//preparing statement
            ps.setString(1,fn);//setting FirstName 
            ps.setString(2,sn);//setting Surname
            ps.setInt(3,kid);//setting ID of classroom student is in
            ps.executeUpdate();//running command
            //cache cleanup
            ps.close();
            connect.close();
        } catch (sqlException se) {
            se.printstacktrace();
        } catch (Exception e) {
            e.printstacktrace();
        } finally {//cache cleanup
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (sqlException se) {
                se.printstacktrace();
            }
        }
    }

    String getKidsNamebyKid(int i) {
        throw new UnsupportedOperationException("Not supported yet."); //To change body of generated methods,choose Tools | Templates.
    }

    String getCentreNamebyCid(int i) {
         String out = "Error,centre not found";
        try {
            Class.forName("org.apache.derby.jdbc.ClientDriver");
            connect = DriverManager.getConnection("jdbc:derby://localhost:1527/SmartData;create=true","password");
            String qry = "SELECT CENTRENAME FROM TBLCENTRES WHERE CID = ?";//setting query command
            ps = connect.prepareStatement(qry);//preparing statement
            ps.setInt(1,i);//setting CID
            ps.executeQuery();//running command
            out = ps.getResultSet().toString();
            ps.close();
        } catch (sqlException se) {
            se.printstacktrace();
        } catch (Exception e) {
            e.printstacktrace();
        } finally {//cache cleanup
            try {
                if (stmt != null) {
                    stmt.close();
                }
            } catch (sqlException se) {
                se.printstacktrace();
            }

            try {
                if (connect != null) {
                    connect.close();
                }
            } catch (sqlException se) {
                se.printstacktrace();
            }
        }
        return out;
    }
}

添加新的学生班级

package smartdatabase;

/**
 *
 * @author travi
 */
public class AddStudent extends javax.swing.JFrame {
private        Conn con = new Conn();
    /**
     * Creates new form AddStudent
     */
    public AddStudent() {
        initComponents();
         int i=0;
         while(con.getCentreNamebyCid(i)!=null){
         jcbCentre.addItem(con.getCentreNamebyCid(i));
         i++;
    }
    }

    @SuppressWarnings("unchecked")
    // <editor-fold defaultstate="collapsed" desc="Generated Code">                          
    private void initComponents() {

        lblTitle = new javax.swing.JLabel();
        lblFirstName = new javax.swing.JLabel();
        lblSurname = new javax.swing.JLabel();
        lblCentre = new javax.swing.JLabel();
        lblKids = new javax.swing.JLabel();
        txbFirstName = new javax.swing.JTextField();
        txbSurname = new javax.swing.JTextField();
        jfcPDF = new javax.swing.JFileChooser();
        jcbCentre = new javax.swing.JComboBox<>();
        jcbKids = new javax.swing.JComboBox<>();
        btnCancel = new javax.swing.JButton();
        jLabel6 = new javax.swing.JLabel();
        btnAdd = new javax.swing.JButton();

        setDefaultCloSEOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);

        lblTitle.setText("Add new student");

        lblFirstName.setText("First Name:");

        lblSurname.setText("Surname:");

        lblCentre.setText("Centre:");

        lblKids.setText("Class:");

        jfcPDF.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                jfcPDFActionPerformed(evt);
            }
        });

        btnCancel.setText("Cancel");

        jLabel6.setText("Please select the PDF containing the student's documents");

        btnAdd.setText("Add Student");
        btnAdd.addActionListener(new java.awt.event.ActionListener() {
            public void actionPerformed(java.awt.event.ActionEvent evt) {
                btnAddActionPerformed(evt);
            }
        });

        javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
        getContentPane().setLayout(layout);
        layout.setHorizontalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                    .addGroup(layout.createSequentialGroup()
                        .addGap(109,109,109)
                        .addComponent(jfcPDF,javax.swing.GroupLayout.PREFERRED_SIZE,486,javax.swing.GroupLayout.PREFERRED_SIZE)
                        .addGap(18,18,18)
                        .addComponent(btnAdd))
                    .addGroup(layout.createSequentialGroup()
                        .addContainerGap()
                        .addComponent(btnCancel))
                    .addGroup(layout.createSequentialGroup()
                        .addGap(191,191,191)
                        .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                            .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                                .addComponent(lblTitle,90,javax.swing.GroupLayout.PREFERRED_SIZE)
                                .addGroup(layout.createSequentialGroup()
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(lblFirstName)
                                        .addComponent(lblSurname,javax.swing.GroupLayout.Alignment.TRAILING)
                                        .addComponent(lblCentre,javax.swing.GroupLayout.Alignment.TRAILING)
                                        .addComponent(lblKids,javax.swing.GroupLayout.Alignment.TRAILING))
                                    .addGap(31,31,31)
                                    .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING,false)
                                        .addComponent(txbFirstName,javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(txbSurname,javax.swing.GroupLayout.Alignment.LEADING)
                                        .addComponent(jcbCentre,javax.swing.GroupLayout.Alignment.LEADING,javax.swing.GroupLayout.DEFAULT_SIZE,Short.MAX_VALUE)
                                        .addComponent(jcbKids,135,javax.swing.GroupLayout.PREFERRED_SIZE))))
                            .addComponent(jLabel6))))
                .addContainerGap(12,Short.MAX_VALUE))
        );
        layout.setVerticalGroup(
            layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
            .addGroup(layout.createSequentialGroup()
                .addContainerGap()
                .addComponent(lblTitle)
                .addGap(18,18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblFirstName)
                    .addComponent(txbFirstName,javax.swing.GroupLayout.PREFERRED_SIZE))
                .addGap(18,18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblSurname)
                    .addComponent(txbSurname,18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblCentre)
                    .addComponent(jcbCentre,18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.BASELINE)
                    .addComponent(lblKids)
                    .addComponent(jcbKids,javax.swing.GroupLayout.PREFERRED_SIZE))
                .addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED,36,Short.MAX_VALUE)
                .addComponent(jLabel6)
                .addGap(18,18)
                .addGroup(layout.createParallelGroup(javax.swing.GroupLayout.Alignment.TRAILING)
                    .addComponent(jfcPDF,213,javax.swing.GroupLayout.PREFERRED_SIZE)
                    .addComponent(btnAdd))
                .addGap(0,0)
                .addComponent(btnCancel)
                .addContainerGap())
        );

        pack();
    }// </editor-fold>                        

    private void jfcPDFActionPerformed(java.awt.event.ActionEvent evt) {                                       
        // Todo add your handling code here:
    }                                      

    private void btnAddActionPerformed(java.awt.event.ActionEvent evt) {                                       

        con.addStudent(txbFirstName.getText(),txbSurname.getText(),1);
    }                                      

    /**
     * @param args the command line arguments
     */
    public static void main(String args[]) {
        try {
            for (javax.swing.UIManager.LookAndFeelInfo info : javax.swing.UIManager.getInstalledLookAndFeels()) {
                if ("Nimbus".equals(info.getName())) {
                    javax.swing.UIManager.setLookAndFeel(info.getClassName());
                    break;
                }
            }
        } catch (ClassNotFoundException ex) {
            java.util.logging.Logger.getLogger(AddStudent.class.getName()).log(java.util.logging.Level.SEVERE,null,ex);
        } catch (InstantiationException ex) {
            java.util.logging.Logger.getLogger(AddStudent.class.getName()).log(java.util.logging.Level.SEVERE,ex);
        } catch (illegalaccessexception ex) {
            java.util.logging.Logger.getLogger(AddStudent.class.getName()).log(java.util.logging.Level.SEVERE,ex);
        } catch (javax.swing.UnsupportedLookAndFeelException ex) {
            java.util.logging.Logger.getLogger(AddStudent.class.getName()).log(java.util.logging.Level.SEVERE,ex);
        }
        //</editor-fold>

        /* Create and display the form */
        java.awt.EventQueue.invokelater(new Runnable() {
            public void run() {
                new AddStudent().setVisible(true);
            }
        });
    }

    // Variables declaration - do not modify                     
    private javax.swing.JButton btnAdd;
    private javax.swing.JButton btnCancel;
    private javax.swing.JLabel jLabel6;
    private javax.swing.JComboBox<String> jcbCentre;
    private javax.swing.JComboBox<String> jcbKids;
    private javax.swing.JFileChooser jfcPDF;
    private javax.swing.JLabel lblCentre;
    private javax.swing.JLabel lblFirstName;
    private javax.swing.JLabel lblKids;
    private javax.swing.JLabel lblSurname;
    private javax.swing.JLabel lblTitle;
    private javax.swing.JTextField txbFirstName;
    private javax.swing.JTextField txbSurname;
    // End of variables declaration                   
}

希望我能提供更多信息,但什至没有错误代码,它只是死机,我无法关闭程序或与程序进行交互,我们将提供任何帮助。通过主菜单上的按钮(构造一个addStudent对象,将visibile设置为true)调用addstudent,当我单击该按钮时,它就会停止。

解决方法

您的getCentreNamebyCid永远不会返回null,因此while(con.getCentreNamebyCid(i)!=null)始终为true。因此,我认为您不应该在String out

中初始化getCentreNamebyCid
String getCentreNamebyCid(int i) {
   String out;
   try {
   ...