0

だから私はこのSQLクエリを持っています:

    "select company, surveys.surveyID, questionID, question, questionScore FROM surveys INNER JOIN (SELECT * FROM companies INNER JOIN "
            + "(SELECT * FROM questions INNER JOIN categories "
            + "ON questions.catID = categories.catID) AS cats "
            + "ON companies.questionID = cats.questionID) AS yes "
            + "ON yes.surveyID = surveys.surveyID WHERE company=?"

「猫」と「はい」は意味がなく、私の非常に冗長な命名スキームの勝利にすぎません。

会社は単なる文字列です。

返されるテーブルは次のようになります。

 ---------------------------------------------
|companyName|surveyID|questionID|questionScore|
 ---------------------------------------------

このテーブルの主キーは(companyName、surveyID、QuestionID)です。これは、各会社が複数の調査を持つことができ、各調査にはいくつかの質問があるためです。

それから私はこのクラスを持っています:

public class Company
{
private String companyName;
private String surveyorName;
private String surveyorTitle;
private int surveyID;
private Map<Integer,Integer> questions;

public Company(String name, String surveyor, String surveyerTitle,
    int surveyID, Map<Integer, Integer> questions)
{
this.companyName = name;
this.surveyorName = surveyor;
this.surveyorTitle = surveyerTitle;
this.surveyID = surveyID;
this.questions = questions;
}

すべてのゲッターとセッターで

たとえば、MensInsamenという会社があるとします。SurveyIDは1です。

Mens Insamen    1       q1     3
Mens Insamen    1       q2     1

等...

次に、会社オブジェクトのリストにSQLクエリのデータを入力する必要があります。しばらく試してみましたが、なかなか思いつきませんでした。

それが(当然のことながら)不明瞭な場合(fokol(no)コーヒー)、私はある時点でそれを改善することができます。

前もって感謝します

4

4 に答える 4

0

これは、arraylistとwhileループを使用するだけで実現できます。ループ
のすぐ外側にあるcompinesのarraylistを作成
し、ループを使用して各Companyオブジェクトをこの配列リストに追加します。

ArrayList<Company> compList = new ArrayList<Company>();

while{

/*read  values to variables and create an object of Company 
  then add to arraylist as follows **/

Company comp = new Company (name, surveyor, surveyerTitle,surveyID,questions);    
compList.add(comp);
}
于 2012-08-21T10:22:32.263 に答える
0

質問からこれまでのところ何を持っているかを伝えるのは本当に難しいですが、カスタムオブジェクトのリストを作成したい場合は、次のようなことをする必要があります:

public List<Company> getCompanies() throws SQLException
{
    List<Company> result = new ArrayList<Company>();

    Connection connection = DriverManager.getConnection(...);
    Statement statement = connection.createStatement();
    ResultSet set = statement.executeQuery("your query here");

    set.beforeFirst();
    while(set.next())
    {
        String textData = set.getString("columnname");
        int integerData = set.getInt("columnname");

        // you can also use set.getString(columnindex);

        Company company = new Company();
        company.set(...);

        result.add(company);
    }
    connection.close();
    return result;
}
于 2012-08-21T10:28:51.487 に答える
0

1-次を使用してデータベースへの接続を作成する必要があります。

Class.forName(DB_LIBRARY);
connection = DriverManager.getConnection(CONNECTION_PARAMETRS);

DB_LIBRARY を有効なドライバのライブラリに置き換え、CONNECTION_PARAMETERS をデータベース接続設定 (ホスト名、ユーザー名、パスワードなど) に置き換える必要があることに注意してください。

2- ステートメントを作成し、結果セットを返す

Statement statement = connection.createStatement();
ResultSet rs = statement.executeQuery(your_select_query);

3- 結果セットをループしてデータをフェッチする

Company company;
while(rs.next()){
         company = new Company(rs.getString(1), 
         rs.getString(2), 
         rs.getString(3), 
         rs.getInt(4),
         new HashMap<Integer, Integer>().put(rs.getInt(5), rs.getInt(6)
}

列名またはその番号を使用できることに注意してください。次のように、複数のレコードを取得する場合は ArrayList を使用することもできます。

ArrayList<Company> companies = new ArrayList<Company>();
while(rs.next()){
         companies.add(new Company(rs.getString(1), 
         rs.getString(2), 
         rs.getString(3), 
         rs.getInt(4),
         new HashMap<Integer, Integer>().put(rs.getInt(5), rs.getInt(6));
}
于 2012-08-21T10:55:17.843 に答える
0

クラスCompanyMapperを作成し、そのメソッドにSQL ResultSetを入力として渡し、それをループしてCompanyのリストを作成し、それを返します。

class CompanyMapper{

public List<Company> getCompanies(ResultSet rs){

    ArrayList<Company> compList = new ArrayList<Company>();
    while(...rs has entry...){
        //Add new Company to the list
    }
return compList;
}
于 2012-08-21T10:25:43.403 に答える