powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / как избавиться от повторяющихся значений в теге <select>
12 сообщений из 12, страница 1 из 1
как избавиться от повторяющихся значений в теге <select>
    #34242584
VampirO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Люди добрые! Столкнулся с такой проблемой.
Написал значит я сервлет, который садит из моей БД данные в таблицу. Причем в первый столбец просто значения, а во втором столбце в каждой ячейке имеется выпадающий список со значениями из той же БД. Картинка прилагается. Но никак не могу избавиться от повторяющихся значений. Кто подскажет, что можно сделать?
Вот исходник:

Код: plaintext
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.
 import  javax.servlet.*;
 import  javax.servlet.http.*;
 import  java.io.*;
 import  java.util.*;
 import  java.sql.*;

 public   class  testdbselect  extends  HttpServlet
{
 public   void  doGet (HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException
{
String str,std, lost;
 Connection cn;
 Statement st;
 
 ResultSet rs,rs1;
String url="jdbc:odbc:otdels";
 try 
  {
	String encoding = "windows-1251"; // KOI-8R, UTF-8
	response.setContentType("text/html;charset=" + encoding);
	response.setCharacterEncoding(encoding);
	request.setCharacterEncoding(encoding);
	PrintWriter out;
	out=response.getWriter();
	//////////////////////////// Забиваем массив из отдела
	 try 
	{
	 DriverManager.registerDriver( new  sun.jdbc.odbc.JdbcOdbcDriver());
        
	 cn=DriverManager.getConnection(url);
	 st=cn.createStatement();
	 String sqlotdel= "SELECT naimenovanie FROM Otdel";
	 rs=st.executeQuery(sqlotdel);

      Vector list =  new  Vector();
	 while  (rs.next())
	{
       
        list.addElement(rs.getString( 1 ));

	}
     rs.close();

	//////////////////////////////////Забиваем массив из отдела

	String sqlQuiry="SELECT rabotnik.Name, Otdel.naimenovanie "+
	"FROM Otdel INNER JOIN rabotnik ON Otdel.key = rabotnik.keys";
	rs1=st.executeQuery(sqlQuiry); 
	 int  maxCols = rs1.getMetaData().getColumnCount();
	out.println("<html><body>");
	out.println("<table border=1>");
	out.println("<tr>");
	 for  ( int  h= 1 ; h<=maxCols; h++)
	   {
		out.println("<td>" +rs1.getMetaData().getColumnLabel(h)
				+"</td>");
		}
	out.println("</tr>");

	 while  (rs1.next())
	{
	out.println("<tr>");
	str=rs1.getString( 1 );
	std=rs1.getString( 2 );
	out.println("<td>"+str+"</td>");
	/////////////
	out.println("<td><select>");
	out.println("<option  value="+std+" selected>"+std+"</option>");

         for  ( int  k= 0 ; k<list.size(); k++) 
{
        	//lost=(String)list.elementAt(k);
 if (list.elementAt(k)!=std)
    {
   out.println("<option value="+list.elementAt(k)+" > "+list.elementAt(k)+"</option>");
  }
  else 
{
	out.println("<option value="+list.elementAt(k)+" selected > "+list.elementAt(k)+"</option>");
	}
	}
	out.println("</select></td>");
	/////////////
out.println("</tr>");
}
out.close();
st.close(); 
cn.close();
 }
 catch  (SQLException e)
{
System.out.println(e.toString());	
}
 }	

 catch  (Exception e) {}
}

}
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34242621
VampirO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34242656
VampirO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
картинка
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34242851
y3u
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а DISTINCT в запросе, часом, не поможет?
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34242857
VampirO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
все! сделал!
Вот код:

Код: plaintext
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.
 import  javax.servlet.*;
 import  javax.servlet.http.*;
 import  java.io.*;
 import  java.util.*;
 import  java.sql.*;

 public   class  testdbselect  extends  HttpServlet
{
 public   void  doGet (HttpServletRequest request, HttpServletResponse response)  throws  ServletException, IOException
{
String str,std, lost;
 Connection cn;
 Statement st;
 
 ResultSet rs,rs1;
String url="jdbc:odbc:otdels";
 try 
  {
	String encoding = "windows-1251"; // KOI-8R, UTF-8
	response.setContentType("text/html;charset=" + encoding);
	response.setCharacterEncoding(encoding);
	request.setCharacterEncoding(encoding);
	PrintWriter out;
	out=response.getWriter();
	//////////////////////////// Забиваем массив из отдела
	 try 
	{
	 DriverManager.registerDriver( new  sun.jdbc.odbc.JdbcOdbcDriver());
        
	 cn=DriverManager.getConnection(url);
	 st=cn.createStatement();
	 String sqlotdel= "SELECT naimenovanie FROM Otdel";
	 rs=st.executeQuery(sqlotdel);

      Vector list =  new  Vector();
	 while  (rs.next())
	{
       
        list.addElement(rs.getString( 1 ));

	}
     rs.close();

	//////////////////////////////////Забиваем массив из отдела

	String sqlQuiry="SELECT rabotnik.Name, Otdel.naimenovanie "+
	"FROM Otdel INNER JOIN rabotnik ON Otdel.key = rabotnik.keys";
	rs1=st.executeQuery(sqlQuiry); 
	 int  maxCols = rs1.getMetaData().getColumnCount();
	out.println("<html><body>");
	out.println("<table border=1>");
	out.println("<tr>");
	 for  ( int  h= 1 ; h<=maxCols; h++)
	   {
		out.println("<td>" +rs1.getMetaData().getColumnLabel(h)
				+"</td>");
		}
	out.println("</tr>");

	 while  (rs1.next())
	{
	out.println("<tr>");
	str=rs1.getString( 1 );
	std=rs1.getString( 2 );
	out.println("<td>"+str+"</td>");
	/////////////
	out.println("<td><select>");
	//out.println("<option  value="+std+" selected>"+std+"</option>");

         for  ( int  k= 0 ; k<list.size(); k++) 
{
  if  (!list.elementAt(k).equals(std))    
//if(list.elementAt(k)!=std)
	
    {
   out.println("<option value="+list.elementAt(k)+" > "+list.elementAt(k)+"</option>");
  }
  else   if  (list.elementAt(k).equals(std))
{
	out.println("<option value="+list.elementAt(k)+" selected > "+list.elementAt(k)+"</option>");
	}
	}
	out.println("</select></td>");
	/////////////
out.println("</tr>");
}
out.close();
st.close(); 
cn.close();
 }
 catch  (SQLException e)
{
System.out.println(e.toString());	
}
 }	

 catch  (Exception e) {}
}

}
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34242871
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Это называется "через одно место". Выбирать все данные, чтобы потом отфильтровывать повторяющиеся значения - это конечно же круто!
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34242900
VampirO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ruslan.IsbarovЭто называется "через одно место". Выбирать все данные, чтобы потом отфильтровывать повторяющиеся значения - это конечно же круто!

Пока по другому не умеем... А у Вас какие предложения?) Cкидывайте, посмотрим
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34244161
Фотография Ruslan.Isbarov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
VampirO Ruslan.IsbarovЭто называется "через одно место". Выбирать все данные, чтобы потом отфильтровывать повторяющиеся значения - это конечно же круто!

Пока по другому не умеем... А у Вас какие предложения?) Cкидывайте, посмотрим
тут ведь сказали :)
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34244201
VampirO
Используйте один запрос с Distinct или Group by.
И еще в Java есть такая вещь как HashMap (на будущее). Или HashSet.
И строки нельзя сравнивать с помощью оператора !=.
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34244280
Фотография Кувалдин Роман
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Разжую:

меня даже анрегом забанили :((Используйте один запрос с Distinct или Group by.
Код: plaintext
String sqlotdel= "SELECT DISTINCT naimenovanie FROM Otdel";
меня даже анрегом забанили :((И еще в Java есть такая вещь как HashMap (на будущее). Или HashSet.
В HashSet помещаются уникальные объекты. Если бы вы list задали не как ArrayList а как HashSet - проблемы бы не было.
меня даже анрегом забанили :((И строки нельзя сравнивать с помощью оператора !=.

Сравнивать значения строк нужно функцией equals(). Вот например:
Код: plaintext
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.
 package  javaapplication2;

 public   class  Main {
     public  Main() {
        // Первая строка
        String str1 = "hello";
        // Вторая строка. Записана так, чтобы не сработала оптимизация.
        // Если записать что str2 = "he"+"llo", на уровне компилятора это превратится в hello на момент создания объекта,
        // и в целях экономии памяти str1 и str2 будут указывать на один и тот же объект
        String str2 = "he";
        str2 += "llo";
        // Это третья строка
        String str3 =  new  StringBuffer().append("hello").toString();
        // Значения всех строк равны:
        System.out.println("str1: "+str1);
        System.out.println("str2: "+str2);
        System.out.println("str3: "+str3);
        // однако объекты, на которые указывают переменные - разные, тут везде будет false
        System.out.println("str1==str2: "+(str1==str2));
        System.out.println("str1==str3: "+(str1==str3));
        System.out.println("str2==str3: "+(str2==str3));
        // А вот тут везде будут true, поскольку содержимое всех строк одно и то же.
        System.out.println("str1.equals(str2): "+(str1.equals(str2)));
        System.out.println("str1.equals(str3): "+(str1.equals(str3)));
        System.out.println("str2.equals(str3): "+(str2.equals(str3)));
    }
    
     public   static   void  main(String[] args) {
         new  Main();
    }
}
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34244372
VampirO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кувалдин РоманРазжую:

меня даже анрегом забанили :((Используйте один запрос с Distinct или Group by.
Код: plaintext
String sqlotdel= "SELECT DISTINCT naimenovanie FROM Otdel";
меня даже анрегом забанили :((И еще в Java есть такая вещь как HashMap (на будущее). Или HashSet.
В HashSet помещаются уникальные объекты. Если бы вы list задали не как ArrayList а как HashSet - проблемы бы не было.
меня даже анрегом забанили :((И строки нельзя сравнивать с помощью оператора !=.

Сравнивать значения строк нужно функцией equals(). Вот например:
Код: plaintext
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.
 package  javaapplication2;

 public   class  Main {
     public  Main() {
        // Первая строка
        String str1 = "hello";
        // Вторая строка. Записана так, чтобы не сработала оптимизация.
        // Если записать что str2 = "he"+"llo", на уровне компилятора это превратится в hello на момент создания объекта,
        // и в целях экономии памяти str1 и str2 будут указывать на один и тот же объект
        String str2 = "he";
        str2 += "llo";
        // Это третья строка
        String str3 =  new  StringBuffer().append("hello").toString();
        // Значения всех строк равны:
        System.out.println("str1: "+str1);
        System.out.println("str2: "+str2);
        System.out.println("str3: "+str3);
        // однако объекты, на которые указывают переменные - разные, тут везде будет false
        System.out.println("str1==str2: "+(str1==str2));
        System.out.println("str1==str3: "+(str1==str3));
        System.out.println("str2==str3: "+(str2==str3));
        // А вот тут везде будут true, поскольку содержимое всех строк одно и то же.
        System.out.println("str1.equals(str2): "+(str1.equals(str2)));
        System.out.println("str1.equals(str3): "+(str1.equals(str3)));
        System.out.println("str2.equals(str3): "+(str2.equals(str3)));
    }
    
     public   static   void  main(String[] args) {
         new  Main();
    }
}


Спасибо! Я уже так и сделал! Что-то подзабыл совсем, как надо правильно строки сравнивать. Лоханулся, сорри)
...
Рейтинг: 0 / 0
как избавиться от повторяющихся значений в теге <select>
    #34244386
VampirO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ruslan.IsbarovЭто называется "через одно место". Выбирать все данные, чтобы потом отфильтровывать повторяющиеся значения - это конечно же круто!

Во первых, поле naimenovanie является уникальным (то есть в нем нет повторяющихся значений). Поэтому нет смысла использовать DISTINCT.

Во вторых, все таки надо как-то "отфильтровать" данные из таблицы otdel с целью вывести исходные данные "как есть". То есть Петров находится в литейном цехе и ни в каком ином - это и должен видеть пользователь.

И в третьих, нужно сделать возможность перемещения работника из одного отдела в другой. Для этого и сделан выпадающий список.

Если есть другие предложения сделать все более компактно и проще, то скидывайте)
...
Рейтинг: 0 / 0
12 сообщений из 12, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / как избавиться от повторяющихся значений в теге <select>
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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