2

タイトルは、[ロード]をクリックするとプログラムがフリーズするときに発生するエラーです。私はステートメントの中でステートメントを実行しているためだと思いますが、私が見たところ、それが私の問題の唯一の解決策です。ロードすることで、患者のリストを再作成したいのですが、そのためには、患者の状態も再作成する必要があります。コードは機能します。一番下のメソッドは私が修正しようとしているものです。問題は、2つのステートメントを開いていることだと思いますが、よくわかりません。ロード:

public void DatabaseLoad()
{
    try
    {
        String Name = "Wayne";
        String Pass= "Wayne";
        String Host = "jdbc:derby://localhost:1527/Patients";
        Connection con = DriverManager.getConnection( Host,Name, Pass);
        PatientList.clear();
        
        
        Statement stmt8 = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,        
             ResultSet.CONCUR_UPDATABLE);
        String SQL8 = "SELECT * FROM PATIENTS";
        ResultSet rs8 = stmt8.executeQuery( SQL8 );
        ArrayList<PatientCondition> PatientConditions1 = new ArrayList();
        
        while(rs8.next())
        {
            PatientConditions1 = LoadPatientConditions();
        }
        
        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,    
            ResultSet.CONCUR_UPDATABLE);
        String SQL = "SELECT * FROM PATIENTS";
        ResultSet rs = stmt.executeQuery( SQL );
        
        while(rs.next())
        {
            int id = (rs.getInt("ID"));
            String name = (rs.getString("NAME"));
            int age = (rs.getInt("AGE"));
            String address = (rs.getString("ADDRESS"));
            String sex = (rs.getString("SEX"));
            String phone = (rs.getString("PHONE"));
            
            Patient p = new Patient(id, name, age, address, sex, phone,
                PatientConditions1);
            PatientList.add(p);
       }
        
        UpdateTable();
        UpdateAllViews();
        
        DefaultListModel PatientListModel = new DefaultListModel();
        
        for (Patient s : PatientList) {
            PatientListModel.addElement(s.getAccountNumber() + "-" + s.getName());
        }

        PatientJList.setModel(PatientListModel);
        
       }
      
    catch(SQLException err)
    {
        System.out.println(err.getMessage());
    }

 
}

ArrayListこれは、患者の状態を返す方法です

public ArrayList LoadPatientConditions()     
{ 
    ArrayList<PatientCondition> PatientConditionsTemp = new ArrayList();
    try
    {
        String Name = "Wayne";
        String Pass= "Wayne";
        String Host = "jdbc:derby://localhost:1527/Patients";
        Connection con = DriverManager.getConnection( Host,Name, Pass);
        Statement stmt = con.createStatement(ResultSet.TYPE_SCROLL_INSENSITIVE,   
            ResultSet.CONCUR_UPDATABLE);
        String SQL = "SELECT * FROM PATIENTCONDITIONS";
        ResultSet rs5 = stmt.executeQuery( SQL );

        int e = 0;
        while(rs5.next())
        {
            e++;
            String ConName = (rs5.getString("CONDITION"));
            PatientCondition k = new PatientCondition(e,ConName);
            PatientConditionsTemp.add(k);
        }   
     }
     catch(SQLException err)
     {
         System.out.println(err.getMessage());
     }
  
     return PatientConditionsTemp;
 }
4

4 に答える 4

3

ここから始めるのが良いでしょう: http://wiki.apache.org/db-derby/LockDebugging

于 2013-03-23T14:27:48.433 に答える
2

プログラムを再起動したときにそれらが開かれないように、ステートメントと結果セットも閉じる必要があります。try および catch ステートメント内のコード行の最後にstmt.close();andを追加します。rs.close();

于 2013-10-28T09:25:51.337 に答える
0

Why could you not use the same connection object to do both the queries? Like pass that connection object to the LoadPatientConditions() as a parameter and use it there.

于 2013-03-23T04:05:48.393 に答える