Обновляемое количество строк ResultSet - PullRequest
1 голос
/ 26 декабря 2011

Я хочу привязать таблицу базы данных к свинговому JTable и сделать этот JTable редактируемым, используя API в обновляемом ResultSet (# insertRow, # deleteRow (), # updateRow ()).

, поэтому янужно создать реализацию TableModel, обернув ResultSet.

public class MyTableModel implements TableModel {

private ResultSet rs;

private ResultSetMetaData rsmd;

@Override
public int getRowCount() {
    return 0;
}

@Override
public int getColumnCount() {
    return 0;
}

@Override
public String getColumnName(int columnIndex) {
    return null;
}

@Override
public Class<?> getColumnClass(int columnIndex) {
    return null;
}

@Override
public boolean isCellEditable(int rowIndex, int columnIndex) {
    return false;
}

@Override
public Object getValueAt(int rowIndex, int columnIndex) {
    return null;
}

@Override
public void setValueAt(Object aValue, int rowIndex, int columnIndex) {

}

@Override
public void addTableModelListener(TableModelListener l) {

}

@Override
public void removeTableModelListener(TableModelListener l) {

}

}

, затем, как я могу реализовать метод getRowCount ()?

как определить числастрок в обновляемом наборе результатов?

например, если пользователь нажимает кнопку «добавить строку», то я вызываю такие методы:

        rs.moveToInsertRow();
        rs.updateString(1, "yqwang");
        rs.insertRow();

как синхронизировать пользовательский интерфейс JTable илежащий в основе ResultSet?

Ответы [ 3 ]

3 голосов
/ 26 декабря 2011

Ты не должен этого делать.ResultSet требуется открытое соединение с базой данных, и изменения, внесенные в набор результатов, не будут зафиксированы в базе данных, пока вы не зафиксируете соединение.

Это означает, что если база данных решит закрыть соединение, потому что какое-то время не видела никаких действий, или если ваше приложение вылетит через три часа, вы потеряете все изменения, сделанные за эти 3 часа,

Это также означает, что вы можете заблокировать некоторые строки на длительное время и, таким образом, заставить другие транзакции ждать много времени, прежде чем сможете что-либо делать.из набора результатов в модель таблицы и начинайте новую транзакцию каждый раз, когда вам нужно вставить или обновить строку.

0 голосов
/ 02 июля 2015

Когда вы выполняете insertRow () в ResultSet "Вы не можете видеть результат INSERT в ResultSet" . Чтобы увидеть строки, которые были вставлены, вам нужно повторно выполнить ваш запрос и получить новый набор результатов.

Для справки по " Ни один тип набора результатов не может видеть строку, вставленную операцией INSERT набора результатов. " см. http://docs.oracle.com/cd/B28359_01/java.111/b31224/resltset.htm#i1024719

0 голосов
/ 26 декабря 2011

Чтобы привязать JTable к базе данных, вам необходимо обновить JTable и перезапустить JTable. Чтобы получить нет. строк в наборе результатов просто вызовите эти два метода-

rs.last();
int count = rs.getRow();

здесь отсчет дает вам нет. записей в вашем ResultSet.

...