0

、、およびフィールドclientを持つ新しい Bean を作成しました。もちろん、モデルとビューを作成しました。私のモデルは、すべてのクライアントのリストを返します。そして、これはうまく機能しています。IdNameLastNameAddress

しかし、 でフィルタリングされた特定のクライアントを 1 つだけ選択できるモデルが必要Idです。SQL からのフィルター (id) 基準に従ってクライアントを 1 つだけ取得するために、このモデル内で (SQL ステートメント以外に) 何を変更する必要があるか教えてもらえますか?

{
    Connection connection = getDatabaseConnection();
    request.setAttribute("clientList", getClientList(connection));
    closeDatabaseConnection(connection);
}

private ArrayList<Client> getClientList(Connection con)
{
    String sqlstr = "SELECT * FROM Clients";
    PreparedStatement stmt = null;
    ResultSet rs = null;
    ArrayList<Client> clients = new ArrayList<Client>();

    try
    {
        stmt = con.prepareStatement(sqlStr);
        rs = stmt.executeQuery();

        while (rs.next())
        {
            Client client = new Client();
            client.setId(rs.getInt("Id"));
            client.setName(rs.getString("Name"));
            client.setLastName(rs.getString("LastName"));
            client.setAddress(rs.getString("Address"));

            clients.add(client);
        }

        rs.close();
        stmt.close();
    }
    catch (SQLException sqle)
    {
        sqle.printStackTrace();
    }
    finally
    {
        return clients;
    }
}
4

3 に答える 3

0

引数として指定した ID に基づいて単一のクライアントを返すメソッドをもう 1 つ作成できます。

 public Client getClientById(int id){
    //fetch the client data using the id

    //make a local Client object
    Client c = new Client();

    //populate c based on the values you get from your database.

    //return this local object of Client
    return c;

 }
于 2012-10-19T11:11:25.140 に答える
0

ええと、すべてのクリエットを取得するために呼び出すメソッドを含むクラスが既にあると思いますよね?

さて、別のメソッドを追加しますが、今回はクライアント ID をパラメーターとして受け取るメソッドです。

public List<Client> getAllClients();
public Client getClientById(int clientId);

最初の SQL ステートメントのロジックはすべてのレコードを取得するためのものであるため、2 番目の SQL ステートメントが必要になります。何かのようなもの:

"select clientId, clientName, ... from clients where clientId=?"

JDBC PreparedStatement を使用すると、? を簡単に置き換えることができます。API によって受信される実際のパラメーターについて。

両方の方法で使用できるように、マッピング戦略を抽象化することも検討できます。

class ClientMapper implements SqlMapper<Client> {
    @Override
    public Client map(ResultSet rs) throws SQLException {
       Client client = new Client();
       client.setId(rs.getInt("Id"));
       client.setName(rs.getString("Name"));
       client.setLastName(rs.getString("LastName"));
       client.setAddress(rs.getString("Address"));
       return client;
    }
}

この単一のクライアント マッパーを使用してすべてのクライアントを取得する ClientsMapper を使用することもできます。

class ClientsMapper implements SqlMapper<List<Client>>{
   @Override
   public List<Client> map(ResultSet rs){
     List<Client> result = new ArrayList<>();
     ClientMapper mapper = new ClientMapper();
     while(rs.next()){
        result.add(mapper.map(rs));
     }
     return result;
   }
}
于 2012-10-19T11:08:09.113 に答える
0

sql ステートメントのほかに、とはどういう意味ですか?クエリに where 句を追加する必要があります。それ以外の場合は考えられません。

于 2012-10-19T11:04:54.703 に答える