11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127

ResultSet отправить через сокет

13.02.2014, 15:56. Показов 5865. Ответов 52
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Вот такое дело... Есть клиент, есть сервер, клиент подключился к серверу и спросил:
T-SQL
1
select * from database_1
Сервер взял такой, выполнил все, и получил содержимое БД (одну таблицу с несколькими полями). Хочется только теперь отправить этот резулсет клиенту, и там красиво отресовать эту таблицу в GUI. Проблема в том, что я нублю и не понимаю, как отправить этот самый резулсет клиенту (((

До того, как дошел до этой проблемы, общался клиент с сервером через сокет вот так:
Сервер:
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
//***********************************************
//**************Старт сервера********************
//***********************************************
 
import java.net.InetAddress;
import java.net.ServerSocket;
 
 
public class ServerManager {
    
    public static void StartServer(){
        
        try{
            
            int conCounter = 0; //Счетчик
            
            ServerSocket server = new ServerSocket(3128, 0,
                    InetAddress.getByName("localhost"));
 
            System.out.println("Server is started");
 
            while(true)
            {
                new Server(conCounter, server.accept());
                conCounter++;
            }
            
        }catch(Exception e)
        {System.out.println("init error: "+e);}
        
    }
 
}
И собственно само общение:

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
54
55
56
import java.io.DataInputStream;
import java.io.DataOutputStream;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
 
import javax.swing.*;
 
import java.awt.*;
 
 
public class Server extends Thread {
 
    private Socket serversocket;
    private int num;
    
    public Server(int num, Socket s)
    {
        this.num = num;
        this.serversocket = s;
        
        setDaemon(true);
        setPriority(NORM_PRIORITY);
        start();
    }
    
    public void run(){
        
        try{
            
            InputStream sin = serversocket.getInputStream();
            OutputStream sout = serversocket.getOutputStream();
            
            DataInputStream in = new DataInputStream(sin);
            DataOutputStream out = new DataOutputStream(sout);
            
            String line = null;
            line = in.readUTF();
            
            System.out.println("Зашел клиент с ником: " + line);
            //sleep(5000);
            /*JOptionPane.showMessageDialog(null,
                    " Введен неверный логин или пароль!" +
            "\n Перезапустите преложение и повторите ввод!",
                    "Ошибка авторизации",
                    JOptionPane.ERROR_MESSAGE);
        
            */System.out.println("1234");
            //new GUI("Заголовок");
            
        }catch(Exception e)
        {System.out.println("init error: "+e);}
        
    }
    
}
А клиент делал следующие:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
 int serverPort = 3128; 
         String address = "127.0.0.1";
         
         try{
             
             InetAddress ipAddress = InetAddress.getByName(address); 
             Socket socket = new Socket(ipAddress, serverPort); 
             
             OutputStream sout = socket.getOutputStream();
             DataOutputStream out = new DataOutputStream(sout);
             
             String line = null;
             line = message.getLogin();
             out.writeUTF(line);
             out.flush();
             
         } catch (Exception x) {
                x.printStackTrace();
         }
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.02.2014, 15:56
Ответы с готовыми решениями:

XOR- шифрование и передача через сокет
Здравствуйте. Мне я сделал клиент, сервер, в клиенте есть метод для шифровки, а в серверном приложении- для дешифровки. В клиенте нужно...

Отправить GET запрос через сокет
Нужно сохранить картинку полученную с помощью гет запроса через команду: ./clientTCP https://i.**********/5dprNTj.jpg > img.jpg ...

Как отправить экземпляр структуры через сокет?
У меня есть определенная структура пакета, но я не понимаю, как по ней слать сам пакет.. Структура: 857 BattleStart { int...

52
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
18.02.2014, 21:21  [ТС]
Студворк — интернет-сервис помощи студентам
Цитата Сообщение от _Den_ Посмотреть сообщение
В этом контексте думаю будет понятно
Тут такой вопрос... Туплю что то, или просто не понимаю... В общем,
Цитата Сообщение от _Den_ Посмотреть сообщение
public List<Book> getAllBooks()
Это ведь не является функцией... как тогда мне к этому обратиться?...
Такое ощущение, что бред написал, поэтому напишу на своем примере...
У меня есть:

Функция main у сервера:
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
import java.io.IOException;
import javax.swing.*;
 
//***********************************************
//*******************Сервер**********************
//***********************************************
 
public class main extends JFrame{
 
    public static void main(String[] args) throws IOException {
        
        //Коннект к БД
        //Подключились к серверу
        DataBaseManager.Connect();
        ServerManager.StartServer();
    }
 
}
Как только я включаю сервер, выполняется функция Connect, она лежить в классе dataBaseManager, вот этот класс:

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
import java.sql.*;
import java.io.*;
import java.net.*;
import java.awt.*;
import java.util.List;
import java.util.ArrayList;
 
 
public class DataBaseManager {
    
    private static Connection con;
    private static Socket serversocket;
    private static ResultSet rs = null;
    
    private int ID_Product;
    private String ProductName;
    private int Start_Bind;
    private int TIME_LastBid;
    private int ID_Klient;
    private int New_Bid;
    
    public DataBaseManager(ResultSet rs) throws SQLException{
        
        setID_Product(rs.getInt(1));
        setProductName(rs.getString(2));
        setStart_Bind(rs.getInt(3));
    }
    
    public String getProductName() {
        return ProductName;
    }
 
    public void setProductName(String ProductName) {
        this.ProductName = ProductName;
    }
    
    public int getID_Product() {
        return ID_Product;
    }
 
    public void setID_Product(int ID_Product) {
        this.ID_Product = ID_Product;
    }
    
    public int getStart_Bind() {
        return Start_Bind;
    }
 
    public void setStart_Bind(int Start_Bind) {
        this.Start_Bind = Start_Bind;
    }
    
    public static void Connect()
    {
        System.out.println("Он зашел в функцию Connect");
        String url = "jdbc:mysql://localhost/kursovoy" +
                 "?autoReconnect=true&useUnicode=true&characterEncoding=utf8";
        String name = "root";
        String password = "root1";
        try {
            con = DriverManager.getConnection(url, name, password);
        } 
        catch (SQLException e) 
        {
            e.printStackTrace();
            System.out.println("А вот не подключился он к БД!");
        }
        
    }
    
    public List<DataBaseManager> getAllBooks() throws SQLException{
        System.out.println("Он в этой функции!!!!!(-_-)");
        List<DataBaseManager> bookList = new ArrayList<>();
        Statement st = null;
        
        try{
            
            st = con.createStatement();
            rs = st.executeQuery("SELECT ID_Product, ProductName, Start_Bid FROM database_1 ORDER BY ID_Product");
 
            while (rs.next()) {
                DataBaseManager ListDate = new DataBaseManager(rs);
                bookList.add(ListDate);
            }
            
        }catch (SQLException e) {
            System.err.println(e);
        } finally {
            if (st != null)
                st.close();
            if (rs != null)
                rs.close();
        }
        
        return bookList;
    }
    
    public static void Dissconnect()
    {   
        try 
        {
            con.close();
        }
        catch (SQLException e) 
        {
            e.printStackTrace();
        }
 
    }
    
    public static Connection getCon() 
    {
        return con;
    }
    
    
    
}
И функция Connect то выполняется, а вот
Java
1
public List<DataBaseManager> getAllBooks()
Нет... Почему?...
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
18.02.2014, 21:30
Цитата Сообщение от Apelsin199 Посмотреть сообщение
Это ведь не является функцией
Это и есть функция) Обратится через объект класса. А вы где её вызвали, а то я не вижу?
1
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
18.02.2014, 21:34  [ТС]
Цитата Сообщение от _Den_ Посмотреть сообщение
Это и есть функция) Обратится через объект класса. А вы где её вызвали, а то я не вижу?
Вызывать я ее пытался не в этом классе... Это была ошибка, я так полагаю, вызвать её мне нужно в функции Connect ?
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
18.02.2014, 21:35
Покажите как вы её пытались вызывать
1
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
18.02.2014, 21:35  [ТС]
Цитата Сообщение от _Den_ Посмотреть сообщение
Покажите как вы её пытались вызывать
Это я сейчас и гадаю как сделать
Не подскажите, как нужно?
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
18.02.2014, 21:39
Функция Connect() у вас static, так как вы не реализовывали шаблон Singleton, имеет смысл и эту функцию объявить как static и вызывать
Java
1
2
DataBaseManager.Connect();
DataBaseManager.getAllBooks();
Не static функции вызываются через создание объектов
Java
1
2
DataBaseManager dbm = new DataBaseManager();
dbm.getAllBooks();
Функция возвращает список, по этому просто так её вызывать не имеет смысла
1
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
18.02.2014, 21:53  [ТС]
Цитата Сообщение от _Den_ Посмотреть сообщение
Функция возвращает список, по этому просто так её вызывать не имеет смысла
Все доходчиво, понятно и по теме, большое спасибо )

Добавлено через 12 минут
Цитата Сообщение от _Den_ Посмотреть сообщение
Функция Connect() у вас static, так как вы не реализовывали шаблон Singleton, имеет смысл и эту функцию объявить как static и вызывать
После выполнения функции
Цитата Сообщение от _Den_ Посмотреть сообщение
DataBaseManager.getAllBooks();
bookList хранит всю необходимую мне информацию и я отправляю этот список клиенту, а как мне его там красиво прочитать? Под красиво, я имею ввиду, вытащить от туда нужные мне цифры и названия, да в том порядке, в котором я их туда записал?
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
18.02.2014, 22:40
Не подскажу как вам считать объект на другой стороне. Ну а как вообще считывать со списка:
Java
1
2
3
for(DataBaseManager d : DataBaseManager.getAllBooks()) { //В d попадает каждый объект со списка
                d.getProductName(); //а дальше с ними делаете что вам надо
            }
1
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
18.02.2014, 22:54  [ТС]
Цитата Сообщение от _Den_ Посмотреть сообщение
Не подскажу как вам считать объект на другой стороне.
Идея такая появилась, а что если вот я прочитал БД, и построчно отправлять клиенту данные и там уже с ними работать, понимаю что это плохо, но для небольшого проекта пойдет... Только я теперь не понимаю вот что, в Вашем примере функция
Java
1
getAllBooks()
Возвращает
Java
1
return bookList
Я так понимаю, bookList и содержит всю информацию, которую я запросил из БД, это не так? Или это так?
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
18.02.2014, 23:02
Правильно, он теперь содержит эту информацию. При создании объектов, каждому даются свои поля класса. Количество строк в таблице соответствует количеству объектов в списке
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
public DataBaseManager(ResultSet rs) throws SQLException{
        
        setID_Product(rs.getInt(1));
        setProductName(rs.getString(2));
        setStart_Bind(rs.getInt(3));
    }
...
rs = st.executeQuery("SELECT ID_Product, ProductName, Start_Bid FROM database_1 ORDER BY ID_Product");
 
            while (rs.next()) {
                DataBaseManager ListDate = new DataBaseManager(rs);
                bookList.add(ListDate);
            }
Создается объект ListDate и таких столько, столько строк в таблице и каждому полю объекта даются свои данные через конструктор
Java
1
2
3
4
5
6
private int ID_Product;
    private String ProductName;
    private int Start_Bind;
    private int TIME_LastBid;
    private int ID_Klient;
    private int New_Bid;
Кстати в конструкторе вы можете напрямую записывать данные, методы нужны если вы не в классе создаете объект. Что я имею ввиду
Java
1
2
3
4
5
6
public DataBaseManager(ResultSet rs) throws SQLException{
        
        setID_Product(rs.getInt(1));
        setProductName(rs.getString(2));
        setStart_Bind(rs.getInt(3));
    }
Можно заменить на
Java
1
2
3
4
5
6
public DataBaseManager(ResultSet rs) throws SQLException{
        
        ID_Product = rs.getInt(1);
        ProductName = rs.getString(2);
        Start_Bind = rs.getInt(3);
    }
1
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
18.02.2014, 23:05  [ТС]
Цитата Сообщение от _Den_ Посмотреть сообщение
Правильно, он теперь содержит эту информацию.
Значит, чисто теоретически, я могу отправить клиенту bookList и там его прочитать. Тем самым я сразу получу всю информацию и не нужно будет передавать по одной строке?
0
 Аватар для _Den_
161 / 157 / 29
Регистрация: 21.09.2013
Сообщений: 487
Записей в блоге: 2
18.02.2014, 23:10
В принципе да, при условии что программа использует не большое количество данных. Но проблема в том, как передать, сделать сериализацию и отправить по сети файл или что, не знаю, это раз. Два, это что на той стороне считает эти данные. Выходит там тоже должен быть класс, который будет работать с вашими объектами. Я так не делал, по этому что-то конкретное посоветовать не могу
1
11 / 11 / 0
Регистрация: 04.11.2012
Сообщений: 127
18.02.2014, 23:12  [ТС]
Цитата Сообщение от _Den_ Посмотреть сообщение
Я так не делал, по этому что-то конкретное посоветовать не могу
Спасибо, во многом помогли )
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
18.02.2014, 23:12

Отправить сериализованный объект через сокет по UDP
Доброй ночи, уважаемые форумчане! Нужна консультация по отправке сериализованного объекта по UDP-протоколу (размер файла невелик, файл...

Как отправить данные на url через сокет и получить ответ
Подскажите пожалуйста как отправить данные на url и получить ответ, а то у меня что то не очень хорошо получается. Заранее благодарю.

ftp через сокет 5
подскажите пожалуйста компанент для работы с ftp с возможностью работы через прокси сокет5 или как организовать этот доступ.

Посылка файлов через сокет
Здравствуйте! Подскажите, как реализовать в RAD Studio 2010 следующую процедуру: procedure SendFileBySocket(filename: string); Это...

Работа с программой через сокет
Всем привет. Мне нужно работать через php в программой в моем случае (telnet) и суть в том что мне нужно ввести в этой программе несколько...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
53
19.02.2014, 00:46
Эта тема была перенесена из раздела Java.

Перенес: ildwine
0
19.02.2014, 00:48
Эта тема была перенесена из раздела Java и сети.

Перенес: ildwine
0
Ответ Создать тему
Опции темы

Новые блоги и статьи
Hyper-V: Компьютер должен поддерживать доверенный платформенный модуль 2.0.
Maks 31.08.2026
При установке Windows 11 на виртуальную машину Hyper-V 2-го поколения вылезла такая ошибка: Решение: в параметрах виртуальной машины, в разделе "Безопасность" (Security) активировать флаг. . .
Архитектура биовида Стива в Майнкрафте: Зачем бонобо кубический каннибализм
anaschu 30.08.2026
Кубический Вагинокапитализм в Minecraft: Математический инвариант ОДУ и рок Стивов-бонобо Главная задача разработанной «Модели Всего» — наглядно продемонстрировать наличие системной «судьбы». . .
Оттачиваю умение писать js программы.
russiannick 30.08.2026
Проектом выходного дня стало написание Книги шифров Виженера. Итогом стала версия 200, синий туман. Синий туман назван так, потому что замораживает текст под собой. Нажатие синих кнопок управляют. . .
мат медиц модель 30. презентация проекта
anaschu 27.08.2026
хоп хоп хоп хидахоп, а я кладую))
Как у меня протекала болезнь
zorxor 27.08.2026
Здравствуйте, друзья! Эта запись блога предназначена именно для вас - для моих дорогих друзей, которые знали меня лично. Чтобы ответить на вопрос - а что же со мной произошло на самом деле? Я учился. . .
Нашел вот забавное видео о измерениях. Лучшее что я видел на эту тему
kumehtar 26.08.2026
ILETXiw9bMQ Основная суть и тезисы по измерениям: 0D (Нулевое измерение): точка, не имеющая длины, ширины, высоты или объема. Объект не может перемещаться в 0D. 1D (Первое измерение):. . .
[EasyBuilder Pro] Памятка по разработке для панелей Weintek
ФедосеевПавел 26.08.2026
Памятка по разработке для панелей Weintek ВВЕДЕНИЕ Ранее, при реализации проектов основное внимание уделял разработке управляющей программы для контроллера, а панели оператора доставалось время. . .
Модель по догадкам
anaschu 25.08.2026
Прошло две недели. Я уже рассказывал, как разговаривал с сотрудниками у сортировки и как понял, что главная ветка — не про приёмку, а про отбор. Но тогда я думал, что понял механику. На этой неделе я. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru