powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Выполнение запроса в потоке
7 сообщений из 32, страница 2 из 2
Выполнение запроса в потоке
    #38439106
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz
передайте HashMap


Типа того - получилось
Некрасива обертка устранилась ..... спасибо
Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List;
import javax.swing.SwingWorker;
import java.util.HashMap;

public class JDBCSwingThread extends SwingWorker<Void, HashMap> {
	private String sPath,sUser,sWord;
	private DatabaseTableModel dtmMain;
	private Connection cnCon;
	private ResultSet  rsSet;
	
	public JDBCSwingThread(String sPath,String sUser,String sWord,DatabaseTableModel dtmMain){
		this.sPath = sPath;
		this.sUser = sUser;
		this.sWord = sWord;
		this.dtmMain = dtmMain;
		}
	
	private class SaveReturn {
		private final Connection cnCon;
		private final ResultSet  rsSet;

		public SaveReturn(Connection cnCon,ResultSet rsSet) {
			this.cnCon = cnCon;
			this.rsSet = rsSet;
			}
		}

	protected Void doInBackground() {
		try {
			cnCon = DriverManager.getConnection(this.sPath,this.sUser,this.sWord);
			Statement st = cnCon.createStatement();
			rsSet = st.executeQuery("select * from DD10");
			} catch (Exception e) {System.out.println("Произошла ошибка в запросе: "+e);
			}
		HashMap hmQuery = new HashMap();
		hmQuery.put(1,(new SaveReturn(cnCon,rsSet)));
		publish(hmQuery);
		return null;
		}

	protected void process(List<HashMap> Items) {
		try{
			SaveReturn srSave = (SaveReturn)Items.get(0).get(1);
			this.dtmMain.setDataSource(srSave.rsSet);
			srSave.rsSet.close();
			srSave.cnCon.close();
			} catch(Exception e) {}
		}
	}
...
Рейтинг: 0 / 0
Выполнение запроса в потоке
    #38439108
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XТ.е. - forward обьявлений (дочь-родитель) в JAVе нет
Верно ли Вас понял ?


так ответ получить бы - есть/нет ?
forward обьявления ?
...
Рейтинг: 0 / 0
Выполнение запроса в потоке
    #38439131
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
BlazkowiczНазывается SecondaryLoop.


Приятно - и писано чуть-чуть ! (это хороший признак)

Вопрос такой насколько хорошо здесь реализована синхронизация потоков
можете ответить - пробывали ?
...
Рейтинг: 0 / 0
Выполнение запроса в потоке
    #38439135
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz оберните все методы setText внутри вашего потока в этот Runnable.


Здесь не понял - утчоните на пример
Мне важен возврат данных, чтобы был синхронизирован

Заранее благодарен !
...
Рейтинг: 0 / 0
Выполнение запроса в потоке
    #38439207
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_X,

И возвратный тип в моем случае тоже не нужен, можно просто опубликовать пустой HashMap
publish(new HashMap());

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.List;
import javax.swing.SwingWorker;
import java.util.HashMap;

public class JDBCSwingThread extends SwingWorker<Void, HashMap> {
	private String sPath,sUser,sWord;
	private DatabaseTableModel dtmMain;
	private Connection cnCon;
	private ResultSet  rsSet;
	
	public JDBCSwingThread(String sPath,String sUser,String sWord,DatabaseTableModel dtmMain){
		this.sPath = sPath;
		this.sUser = sUser;
		this.sWord = sWord;
		this.dtmMain = dtmMain;
		}

	protected Void doInBackground() {
		try {
			cnCon = DriverManager.getConnection(this.sPath,this.sUser,this.sWord);
			Statement st = cnCon.createStatement();
			rsSet = st.executeQuery("select * from DD10");
			} catch (Exception e) {System.out.println("Произошла ошибка в запросе: "+e);
			}
        publish(new HashMap());
		return null;
		}

	protected void process(List<HashMap> Items) {
		try{
			this.dtmMain.setDataSource(this.rsSet);
			this.rsSet.close();
			this.cnCon.close();
			} catch(Exception e) {}
		}
	}
...
Рейтинг: 0 / 0
Выполнение запроса в потоке
    #38439441
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
HOME_XТ.е. - forward обьявлений (дочь-родитель) в JAVе нет
Верно ли Вас понял ?
Понятия не имею что вы под этим имеете ввиду. Как оно в общераспротраненной терминологии называется?
...
Рейтинг: 0 / 0
Выполнение запроса в потоке
    #38440465
HOME_X
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Blazkowicz,

Да так и называеться forward declaration class
Вот пример кода DELPHI
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
type
{ Forward declarations }

  TField = class;
  TObjectField = class;
  TDataLink = class;

Потом идет обьявление БАЗОВОГО класса который ссылаеться на ЭТО тип
Потом идет обьявление ЭТОГО клаcса который ссылаеться на БАЗОВЫЙ тип



Вот такая типа рекурсивность распределения памяти
Ну если не знаете- то вероятно нету....

Спасибо в целом мне все подошло
...
Рейтинг: 0 / 0
7 сообщений из 32, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Выполнение запроса в потоке
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]