0

データベースを作成しました。JList のすべてのエントリがデータベースのテーブルに追加されます。これは完全に機能しますが、私の次のタスクは、データベースにあるものをすべて取得して JList にロードすることです。ボタン内に関数を作成しましたが、エラーが発生します。どうしようか悩んでいるので、どなたか解決していただけると幸いです。

ありがとう

これが私のコードです:

JButton btnDb1 = new JButton("J");          
btnDb1.addActionListener(new ActionListener() {                

    public void actionPerformed(ActionEvent arg0) {            
        try {       
            ResultSet rs = st.executeQuery("SELECT * FROM patient");
            while (rs.next()) {
                Patient patient = new Patient(patientname, patientaddress, patientphone, patientid);
                patient.setName(rs.getString("patientname"));
                patient.setAddress(rs.getString("patientaddress"));
                patient.setPhoneNum(rs.getString("patientphone"));
                patient.setID(rs.getInt("patientid"));
                MainDentist.model.addElement(patient);    
            }
        } catch (Exception e) {
            System.out.println(" Error ");                      
        }
    }
});

btnDb1.setBounds(200, 393, 120, 23);
contentPane.add(btnDb1);

ここに私の患者クラスがあります:

public class Patient { 
    public String patientName;
    public String patientAddress;
    public String patientPhone;
    public int patientID;

    public Patient(String patientname, String patientaddress, String patientphone,int patientid){
        patientName = patientname;
        patientAddress = patientaddress;
        patientPhone = patientphone;
        patientID = patientid;
    }

    public String setName(String patientname){            
        return patientName = patientname;
    }

    public String getName(){            
        return patientName;            
    }

    public String setAddress(String patientaddress){            
        return patientAddress = patientaddress;      
    }

    public String getAddress(){            
        return patientAddress;
    }

    public String setPhoneNum(String patientphone){
        return patientPhone = patientphone;
    }

    public String getPhoneNum(){            
        return patientPhone;
    }

    public int setID(int patientid){            
        return patientID = patientid;
    }

    public int getID(){            
        return patientID;            
    }

    public String toString() { // Printing the patient's details to the scroll pane
        return "Patient Name: " + patientName + ", PatientAddress: "
                + patientAddress + ", PatientPhone: " + patientPhone
                + ", patientID: " + patientID +"" ;
    }       
}
4

1 に答える 1

0

actionlistener を言い換えましょう – コメントにコードを投稿することはあまり役に立ちません :) 最初に、actionPerformedメソッドのコードを別の場所に置きます。そうすれば、データベースの読み取りとボタンを押すことを混同しません (データベースを読み取る別のボタンも作成したい場合があります。そうすれば、すべてのコードを再度記述する必要はありません)。とにかく、これは例です:

JButton btnDb1 = new JButton("J");          
btnDb1.addActionListener(new ActionListener() {               

    public void actionPerformed(ActionEvent arg0) {            
        readDatabase();
    }
});

public void onActionPerformed(){
    try { 
        // I don't know where you have that part of code, but you didn't create any statement variable. So here an example DB-connection: 
        String url = "jdbc:mysql://localhost/myDatabase";
        Connection connection = DriverManager.getConnection(url, "username", "password");
        Statement statement = connection.createStatement();      
        ResultSet rs = statement.executeQuery("SELECT * FROM patient");
        while (rs.next()) {
            // read the columns one by one, that way it may be easier to detect errors if one column is wrong
            String name = rs.getString("patientname");
            String address = rs.getString("patientaddress");
            String phone = rs.getString("patientphone");
            int id = rs.getInt("patientid");
            // now that you have all values, create the patient and add it to the model
            // if you have all parameters for the constructor, you don't need to use the setters to set the name and address …
            MainDentist.model.addElement(new Patient(name, address, phone, id));    

        }
    } catch (Exception e) {
        // as JB Nizet suggested, it is easier to detect errors, when you print the whole stack trace (it will tell you in which line the exception gets thrown
        e.printStackTrace();                   
    }        
}

エラーが発生した場合は、投稿を編集して問題点をお知らせください。nameところで:変数がaddressあり、これらすべてが にpatient設定されていることに気付きましたpublic。これは間違いではありませんが、getter と setter を (実際に行っているように) 使用して変数を作成することをお勧めしますprivate。そうすれば、外部から変数にアクセスする方法を制御できます。

于 2013-04-28T22:36:27.533 に答える