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

Код: 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
09.01.2007, 13:02:42
    #34242621
VampirO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как избавиться от повторяющихся значений в теге <select>
...
Рейтинг: 0 / 0
09.01.2007, 13:11:32
    #34242656
VampirO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как избавиться от повторяющихся значений в теге <select>
картинка
...
Рейтинг: 0 / 0
09.01.2007, 14:08:59
    #34242851
y3u
y3u
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как избавиться от повторяющихся значений в теге <select>
а DISTINCT в запросе, часом, не поможет?
...
Рейтинг: 0 / 0
09.01.2007, 14:10:46
    #34242857
VampirO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как избавиться от повторяющихся значений в теге <select>
все! сделал!
Вот код:

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

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

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

меня даже анрегом забанили :((Используйте один запрос с 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
10.01.2007, 06:13:04
    #34244372
VampirO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как избавиться от повторяющихся значений в теге <select>
Кувалдин РоманРазжую:

меня даже анрегом забанили :((Используйте один запрос с 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
10.01.2007, 06:58:49
    #34244386
VampirO
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
как избавиться от повторяющихся значений в теге <select>
Ruslan.IsbarovЭто называется "через одно место". Выбирать все данные, чтобы потом отфильтровывать повторяющиеся значения - это конечно же круто!

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

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

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

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


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