将信息从SQL数据库写入列表

时间:2013-01-09 16:29:03

标签: java swing jtable

我正在完成我的作业,我无法完成我的一个程序...

我有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;
        }
    }
}

请帮帮我..谢谢!

2 个答案:

答案 0 :(得分: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);
    }

有一点我不确定你为什么要AnswersTableModel以及你用它做什么。

答案 1 :(得分:0)

使用公共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);

}