Пейджинговая таблица sql в Java - PullRequest
0 голосов
/ 28 апреля 2018

Я работаю над веб-приложением Java, которое печатает таблицу из базы данных mysql. Мне нужно, чтобы пользователь мог ввести позицию, из которой он хочет распечатать данные. Я не знаю, как разместить в таблице и распечатать его. Вот код, который у меня есть:

PreparedStatement sql= veza.prepareStatement("SELECT * FROM table;");
ResultSet rs = sql.executeQuery();
while (rs.next()) {
     for (int i = positionFrom; i <= positionTo; i++) {
          // ??
          int id = rs.getInt("id");
          String content= rs.getString("content");
          Date time= rs.getTimestamp("time");
          list.add(new List(id, content, time));
     }

 }

Ответы [ 2 ]

0 голосов
/ 28 апреля 2018

Если вы настаиваете на предоставлении всего содержимого таблицы пользователю, а затем разрешаете этому пользователю выбирать нужные строки таблицы для дальнейшей обработки в другом месте вашего кода, вы можете обнаружить, что этот небольшой метод может помочь вам:

public String[] getJTableSelectedRowsData (JTable theTable) {
    // Gets the data contained within all Selected Table Rows.
    // Each array element within the returned string array will
    // contain a Pipe delimited data string of each selected row.
    int[] selectedRows = theTable.getSelectedRows();
    String[] resultArray = new String[selectedRows.length];

    DefaultTableModel dtm = (DefaultTableModel) theTable.getModel();
    int nCol = dtm.getColumnCount();

    for (int i = 0; i < selectedRows.length; i++) {
        String resultString = "";
        for (int j = 0 ; j < nCol ; j++) { 
            resultString+= resultString.equals("") ? dtm.getValueAt(selectedRows[i],j).toString() :
                                               "|" + dtm.getValueAt(selectedRows[i], j).toString(); 
        }
        resultArray[i] = resultString;
    }
    return resultArray;
}

Конечно, вы можете изменить этот метод, чтобы он возвращал все, что вы хотите. В качестве примера того, как вы можете использовать этот метод:

String[] selectedRows = getJTableSelectedRowsData(jTable1);

for (String selectedRow : selectedRows) {
    System.out.println(selectedRow);
}

Если это действительно только от определенной строки в таблице до конца таблицы, то вы можете попробовать что-то вроде этого:

public String[] getAllRowsFromSelected(JTable theTable) {
    // Gets the data contained within all table rows starting 
    // from thefirst selected Table Row to the end of table.
    // Each array element within the returned string array will
    // contain a Pipe delimited data string of each retrieved row.
    int selectedRow = theTable.getSelectedRow();
    if (selectedRow < 0) { selectedRow = 0; }
    int totalRows = theTable.getRowCount();
    String[] resultArray = new String[((totalRows - selectedRow))];

    DefaultTableModel dtm = (DefaultTableModel) theTable.getModel();
    int nCol = dtm.getColumnCount();

    int counter = 0;
    String resultString;
    for (int i = selectedRow; i < totalRows; i++) {
        resultString = "";
        for (int j = 0 ; j < nCol ; j++) { 
            resultString+= resultString.equals("") ? dtm.getValueAt(i,j).toString() :
                                               "|" + dtm.getValueAt(i, j).toString(); 
        }
        resultArray[counter] = resultString;
        counter++;
    }
    return resultArray;
}

Опять же, вы можете изменить этот метод, чтобы он возвращал все, что вам нравится. В качестве примера того, как вы можете использовать этот метод:

String[] desiredRows = getAllRowsFromSelected(jTable1);
for (String desiredRow : desiredRows) {
    System.out.println(desiredRow);
}

Однако намного проще , чтобы ваш запрос получал точные требуемые записи.

0 голосов
/ 28 апреля 2018

Почему бы не ограничить результат запроса с помощью «смещения» и «лимита»? посмотрите на ответы здесь в качестве примера.

...