| Добро пожаловать в форум, Guest >> Войти | Регистрация | Поиск | Правила | | В избранное | Подписаться | ||
| Все форумы / Java |
![]() |
||
|
skywriter Member Откуда: Сообщений: 201 |
Необходимо 2 реализации AbstractTableModel: один включает член connection по принципу композиции; другой использует объект connection другого объекта для создания в себе объекта statement. Я думаю было бы правильно реализовать начало первого класс так: public class ResultSetTableModel extends AbstractTableModel {
protected Statement statement;
protected ResultSet resultSet;
protected ResultSetMetaData metaData;
protected int numOfRows;
public ResultSetTableModel(Connection connection)
throws SQLException {
statement = connection.createStatement(
ResultSet.TYPE_SCROLL_INSENSITIVE,
ResultSet.CONCUR_READ_ONLY );
}а второго так: public class ResultSetTableModelConnection extends ResultSetTableModel {
Connection connection;
public ResultSetTableModelConnection(String driver, String url, String query)
throws SQLException, ClassNotFoundException {
Class.forName(driver);
connection = DriverManager.getConnection(url);
super(connection);
setQuery(query);
}Да вот проблема: Java обязывает вызывать конструктор класса-предка в первой строке. А в этот момент объект connection ещё не сконструирован, чтобы передать его в конструктор предка. Какое же будет правильное решение с точки зрения Java? |
| 19 окт 10, 10:24 [9631606] Ответить | Цитировать Сообщить модератору | |
|
Blazkowicz Member Откуда: http://rsdn.ru/forum/java Сообщений: 12956 |
Statement и Connection внутри реализации TableModel нафиг не упали. Их нужно держать в отдельном классе. Разве что не забывать закрывать вовремя. Вообще если у вас там всего несколько тысяч строк, то зачастую их проще все вычитать и держать в памяти, чем использовать открытый скроллируемый ResultSet. |
| 19 окт 10, 10:58 [9631937] Ответить | Цитировать Сообщить модератору | |
|
J.Serge Member Откуда: Чуркестан Сообщений: 563 |
Если ОЧЕНЬ нужно, то можно две строки кода вынести в static-метод:public class ResultSetTableModelConnection extends ResultSetTableModel {
Connection connection;
public ResultSetTableModelConnection(String driver, String url, String query)
throws SQLException, ClassNotFoundException {
super(getConnection(driver, url));
setQuery(query);
}
public static Connection getConnection(String driver, String url)
throws SQLException, ClassNotFoundException {
Class.forName(driver);
return DriverManager.getConnection(url);
}
Но тебе верно написали - твой подход не очень толковый. Такие вещи, как работа с базой пихать в модель данных не следует. |
| 19 окт 10, 11:23 [9632220] Ответить | Цитировать Сообщить модератору | |
|
skywriter Member Откуда: Сообщений: 201 |
Вот это да! А ведь пример ResultSetTableModel взят из учебника! Виновника зовут H.M.Deitel "Advanced Java 2 Platform". Ну вот, пропало желание дальше его читать - вдруг ещё какой гадости нахватаюсь? |
||
| 19 окт 10, 12:04 [9632732] Ответить | Цитировать Сообщить модератору | |||
|
AlexJm Member Откуда: Дефолт-Сити Сообщений: 305 |
Конечно нахватаешься. Я , например, не очень понимаю, как вообще можно напрямую привязывать TableModel к ResultSet'у. А если я хочу, например, view редактировать? |
||||
| 20 окт 10, 08:33 [9638303] Ответить | Цитировать Сообщить модератору | |||||
| Все форумы / Java | ![]() |
|