0

宿題に取り組んでいて、プログラムの 1 つの部分を完了することができません...

コードでテーブルを作成する JTable クラスがあります... SQL データベースから情報を取得してリストに書き込むメソッドを作成する必要があります

メソッドは次のように見える必要があります:

public static List selectAnswers (int questionId) は SQLException、IOException をスローします

次のコードは私が書いたものです:

public static List<AnswerRow> selectAnswers (int questionId) throws SQLException, IOException
{
    Connection veza = connectToDatabase();

    Properties query = new Properties();

    AnswersTableModel atm = new AnswersTableModel();

    String selectAnswers = query.getProperty("selectAnswers");

    PreparedStatement preparedStatement = veza.prepareStatement(selectAnswers);

    ResultSet rs = preparedStatement.executeQuery();

    List<AnswerRow> lista = new ArrayList<AnswerRow>();

    while(rs.next()){

        String answerText = rs.getString("answerText");
        boolean isRight = rs.getBoolean("answerRight");

                    ?????????????????????????????????????????????????


    }

    closeConnectionToDatabase(veza);

    return lista;
}

??????? フィールドが欠落しており、情報 answeText と isRight を AnswerRow クラス、AnswerTableModel、リストに書き込むためにそこに何を書き込むべきかわかりません...

JTable を作成するコード (私に渡され、先生から変更することはできません) は次のとおりです。

package hr.tvz.java.deveti.model;

import java.util.List;
import java.util.ArrayList;

import javax.swing.table.AbstractTableModel;

public class AnswersTableModel extends AbstractTableModel {

    private Object[][] answers;
    private String[] columnNames;

    public AnswersTableModel (String[] colNames){
        super();
        columnNames = colNames;
    }

    public AnswersTableModel() {
        super();
        this.columnNames = new String[AnswerRow.TABLE_COLUMNS];
        this.columnNames[0] = "Odgovor";
        this.columnNames[1] = "Točan/Netočan";
    }

    public java.lang.Class<?> getColumnClass(int columnIndex) {
        return getValueAt(0, columnIndex).getClass();
    }

    public int getColumnCount() {
        return AnswerRow.TABLE_COLUMNS;
    }

    public int getRowCount() {
        if (answers != null)
            return answers.length;
        else
            return 0;
    }

    public Object getValueAt(int row, int column) {
        return answers[row][column];
    }

    public String getColumnName(int column){
        return columnNames[column];
    }

    public void setValueAt (Object aValue, int rowIndex, int columnIndex){
        answers[rowIndex][columnIndex] = aValue;
    }

    public boolean isCellEditable (int rowIndex, int columnIndex){
        return true;
    }

    public void addNewRow(){
        Object[] o = new Object[] {"", false};
        if ((answers == null) || (answers.length == 0)) {
            answers = new Object[][] {o};
        }else{
            Object[][] answersTemp = new Object[answers.length + 1][AnswerRow.TABLE_COLUMNS];
            for (int i = 0; i < answers.length; i++)
                answersTemp[i] = answers[i];
            answersTemp[answersTemp.length - 1] = o;
            answers = answersTemp;
        }
    }

    public List<AnswerRow> getAnswerRows() {
        List<AnswerRow> list = new ArrayList<>();
        for (Object[] oRow : answers) {
            AnswerRow row = new AnswerRow();
            row.setAnswer((String) oRow[0]);
            row.setRight((boolean) oRow[1]);
            list.add(row);
        }

        return list;
    }

    public void setAnswerRows(List<AnswerRow> answerRows){
        if (answerRows.size() == 0 ) {
            this.answers = new Object[0][0];
            return;
        }
        this.answers = new Object[answerRows.size()][AnswerRow.TABLE_COLUMNS];
        for (int i = 0; i < answers.length; i++){
            answers[i][0] = answerRows.get(i).getAnswer();
            answers[i][1] = answerRows.get(i).isRight();
        }
        this.columnNames = new String[AnswerRow.TABLE_COLUMNS];
        this.columnNames[0] = "Odgovor";
        this.columnNames[1] = "Točno/Netočno";
    }

    public class AnswerRow {
        public static final int TABLE_COLUMNS = 2;
        private boolean isRight;
        private String answer;

        public AnswerRow(){
            answer = "";
            isRight = false;
        }

        public AnswerRow(String answer, boolean isRight){
            this.answer = answer;
            this.isRight = isRight;
        }

        public String getAnswer() {
            return answer;
        }

        public void setAnswer(String answer){
            this.answer = answer;
        }

        public boolean isRight(){
            return isRight;
        }

        public void setRight(boolean isRight){
            this.isRight = isRight;
        }
    }
}

私を助けてください..ありがとう!

4

2 に答える 2

2
List<AnswerRow> lista = new ArrayList<AnswerRow>();

    while(rs.next()){

        String answerText = rs.getString("answerText");
        boolean isRight = rs.getBoolean("answerRight");

        //Create AnswerRow instance and set values to it and Add it to list.
        AnswersTableModel .AnswerRow ansrow = atm.new AnswerRow();
        ansrow.setAnswer(answerText);
        ansrow.setRight(isRight);

       //Add it to list.
       lista.add(ansrow);
    }

私が確信していないことの1つは、なぜあなたがそれを持っているのか、そしてあなたがAnswersTableModelそれをどうするのかということです.

于 2013-01-09T16:32:27.010 に答える
0

public AnswerRow(String answer, boolean isRight) コンストラクターを使用してオブジェクトを作成します

AnswerRow ar=null;
while(rs.next()){

    String answerText = rs.getString("answerText");
    boolean isRight = rs.getBoolean("answerRight");
    ar=new AnswerRow(answerText, isRight);
    lista.add(ar);

}
于 2013-01-09T17:07:41.733 に答える