如何解决单击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 {
...
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。