Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Java Новый топик    Ответить
 Как правильно реализовать иерархию наследования от AbstractTableModel?  [new]
skywriter
Member

Откуда:
Сообщений: 221
Необходимо 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]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно реализовать иерархию наследования от AbstractTableModel?  [new]
Blazkowicz
Member

Откуда: http://rsdn.ru/forum/java
Сообщений: 16946
Statement и Connection внутри реализации TableModel нафиг не упали. Их нужно держать в отдельном классе. Разве что не забывать закрывать вовремя.
Вообще если у вас там всего несколько тысяч строк, то зачастую их проще все вычитать и держать в памяти, чем использовать открытый скроллируемый ResultSet.
19 окт 10, 10:58    [9631937]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно реализовать иерархию наследования от AbstractTableModel?  [new]
J.Serge
Member

Откуда: Чуркестан
Сообщений: 726
Если ОЧЕНЬ нужно, то можно две строки кода вынести в 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]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно реализовать иерархию наследования от AbstractTableModel?  [new]
skywriter
Member

Откуда:
Сообщений: 221
автор
твой подход не очень толковый

Вот это да! А ведь пример ResultSetTableModel взят из учебника!
Виновника зовут H.M.Deitel "Advanced Java 2 Platform".
Ну вот, пропало желание дальше его читать - вдруг ещё какой гадости нахватаюсь?
19 окт 10, 12:04    [9632732]     Ответить | Цитировать Сообщить модератору
 Re: Как правильно реализовать иерархию наследования от AbstractTableModel?  [new]
AlexJm
Member

Откуда:
Сообщений: 449
skywriter
автор
твой подход не очень толковый

Вот это да! А ведь пример ResultSetTableModel взят из учебника!
Виновника зовут H.M.Deitel "Advanced Java 2 Platform".
Ну вот, пропало желание дальше его читать - вдруг ещё какой гадости нахватаюсь?

Конечно нахватаешься. Я , например, не очень понимаю, как вообще можно напрямую привязывать TableModel
к ResultSet'у. А если я хочу, например, view редактировать?
20 окт 10, 08:33    [9638303]     Ответить | Цитировать Сообщить модератору
Все форумы / Java Ответить