Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Как данные вывести не в терминал, а в форму? / 10 сообщений из 10, страница 1 из 1
22.07.2005, 09:57
    #33179400
taison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
Выбираю данные из БД. Программа выводит форму, а данные выводятся в терминал. Наверно надо текстовое поле нарисовать и пытаться туда вывести результаты запроса к БД или какая-то другая компонента есть? Как мой код изменить, чтобы не в терминал, а на форме всё прописать? Может кто посоветует как это сделать в JBuilder6-7, если там легче?
Код: 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.
/*
 * Created on 19.07.2005
 *
 * TODO To change the template for this generated file go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
 package  org.eclipsebook.ch06;

/**
 * @author 
 *
 * TODO To change the template for this generated type comment go to
 * Window - Preferences - Java - Code Style - Code Templates
 */
//Открывает Frame приложение в Eclipse
 import  java.awt.*;//Для поддержки AWT
 import  java.awt.event.*;//Для закрытия окна
 import  java.sql.*;

 public   class  Ch06_02 {
     public   static   void  main(String [] args)
    {
       AppFrame f =  new  AppFrame( );
       f.setSize( 800 ,  600 );
       f.addWindowListener( new  WindowAdapter( ) {  public   void 
           windowClosing(WindowEvent e) {System.exit( 0 );}});
       f.show( );//В этой строке Eclipse пишет The method show() from the type Window is deprecated
       //Нижеследующий код вставлен из работающей под 
       //терминалом проги
       Connection con =  null ;
        try  {
         Class .forName("com.mysql.jdbc.Driver").newInstance();
        con = DriverManager.getConnection("jdbc:mysql://IP/DBase", "login","apassw");
         if (!con.isClosed())
          System.out.println("Successfully connected to DB server...");
       } 
        catch (Exception e) {
        System.err.println("Exception: " + e.getMessage());
       } 
   	 try {
   	  	Statement statement = con.createStatement();
   		ResultSet resultset = statement.executeQuery("Select * from DB");
   	  	 while  ( resultset.next() ) {
   	  		//Здесь попытка русифицировать вопросики из БД не получилась
   			//PrintStream pst = new PrintStream(System.out, true, "CP866");  	
   			//System.setOut(pst); 
   		System.out.println( resultset.getString( "NAME" ) + " ");
   	  	}
   			//resultset.setCharacterEncoding("Cp1251");
   	  	resultset.close();
   	  	statement.close();
   	  	} catch  ( SQLException sqle ) {
   	  	 System.out.println( "jdbc error: " + sqle );
   	  	} 
   		 finally  {
   		       try  {
   	        	 if (con !=  null )
   	          	con.close();
   	      		} 
   		
   			 catch (SQLException e) {}
   	    		}
    }
}

 class  AppFrame  extends  Frame
{
     public   void  paint(Graphics g)
    {
        g.drawString("Таблица",  20 ,  40 );
    }
}
...
Рейтинг: 0 / 0
22.07.2005, 10:53
    #33179550
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
Рисуешь на Форме JTextArea, tpekmnfns из БД собираешь в строку с разделителями (System.getProperty("line.separator")), и JTextArea.setText(строка).
...
Рейтинг: 0 / 0
22.07.2005, 11:17
    #33179633
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
Код: 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.
100.
101.
102.
103.
104.
105.
106.
107.
108.
109.
110.
111.
112.
113.
114.
115.
116.
117.
118.
119.
120.
121.
 package  org.eclipsebook.ch06;

//Открывает Frame приложение в Eclipse
 import  java.awt.*; //Для поддержки AWT
 import  javax.swing.*;

 import  java.sql.*;

 public   class  Ch06_02
{
     public  Ch06_02()
    {
        AppFrame f =  new  AppFrame();
        f.setSize( 800 ,  600 );
        f.setDefaultCloseOperation(f.EXIT_ON_CLOSE);
//        f.show(); //В этой строке Eclipse пишет The method show() from the type Window is deprecated
        f.setVisible(true);

//Нижеследующий код вставлен из работающей под
//терминалом проги

        Connection con =  null ;

        // Создаем строку 
        // (Знаю, что лучше StringBuffer, но не буду гнать коней вперед. 
        // Надо будет - сам разберешься, что такое java..util.StringBuffer)
        String result = "";

         try 
        {
             Class .forName("com.mysql.jdbc.Driver").newInstance();
            // По идее прокатит и без newInstance();

            con = DriverManager.getConnection("jdbc:mysql://delta/test", "root", "root");

             if  (!con.isClosed())
            {
                System.out.println("Successfully connected to DB server...");
            }
        }
         catch  (Exception e)
        {
            System.err.println("Exception: " + e.getMessage());
        }

         try 
        {
            Statement statement = con.createStatement();
            ResultSet resultset = statement.executeQuery("select * from DB");
             while  (resultset.next())
            {
//                System.out.println(resultset.getString("NAME") + " ");
                result = result + resultset.getString("NAME") + System.getProperty("line.separator");
                
                // Вопросики в БД появляются из-за JDBC-драйвера. Сталкивался с этой проблемой на версии 3.11
                // На 3.16 такого уже не было
            }
            resultset.close();
            statement.close();
            
            // А вот тут - передаем полученную строку в форму
            f.setString(result);
        }
         catch  (SQLException sqle)
        {
            System.out.println("jdbc error: " + sqle);
        }
         finally 
        {
             try 
            {
                 if  (con !=  null )
                    con.close();
            }

             catch  (SQLException e)
            {
                // Всегда делай хотя-бы это...
                e.printStackTrace();
            }
        }
    }
    
     public   static   void  main(String[] args)
    {
         new  Ch06_02();
    }
}

 class  AppFrame  extends  JFrame
{
    // Текстовое поле. Многостроковое
    JTextArea area;
    // Поле прокрутки. Это если текст вылезет за границы
    JScrollPane scroll;

     public  AppFrame()
    {
        // Вызываем суперконструктор
         super ();
        // Создаем поле
        area =  new  JTextArea();
        // Создаем скролер для поля
        scroll =  new  JScrollPane(area);
        // Получаем контекст созданного окна
        Container rootPane = getContentPane();
        // Устанавливаем менеджер расположения компонентов
        // (Компоненты будут занимать все свободное место, читай javadoc)
        rootPane.setLayout( new  BorderLayout());
        // Помещаем поле по центру
        rootPane.add(scroll, BorderLayout.CENTER);
    }
    
     public   void  setString(String content)
    {
        area.setText(content);
        area.validate();
    }
}


...
Рейтинг: 0 / 0
22.07.2005, 11:19
    #33179644
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
Ну и для полного счастья в конструктор appFrame можно добавить еще и вто это:
Код: plaintext
1.
2.
        area.setLineWrap(true);
        area.setWrapStyleWord(true);
...
Рейтинг: 0 / 0
22.07.2005, 11:21
    #33179650
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
А уж для совсем полного счастья поищи в хелпе билдера описание компонентов dbSwing
...
Рейтинг: 0 / 0
22.07.2005, 14:02
    #33180137
taison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
Спасибо Роман! Получилось таки, но:
1. Код работает только через командную строку. Под IDEs выводится форма, но данные не печатаются, ругается:
Exception: com.mysql.jdbc.Driver
Exception in thread "main" java.lang.NullPointerException
at Ch06_021.<init>(Ch06_021.java:48) //Ссылка на строку Statement statement = con.createStatement();
at Ch06_021.main(Ch06_021.java:86)//Ссылка на строку new Ch06_021();
2. Русские буквы отображаются не верно. Хотя коннектор стоит mysql-connector-java-3.1.9. Пытался перевести кодировку запросом: ResultSet resultset1 = statement.executeQuery("set character set cp1251_koi8");
Результат: переводит, но в другие иероглифы :).
...
Рейтинг: 0 / 0
22.07.2005, 15:09
    #33180327
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
1. В IDE у тебя не добавлен MySQL JDBC Driver в перечень библиотек для проекта. Соответственно, в CLASSPATH она не попадает.

2. Ну не знаю. У меня с mysql-connector-java-3.0.16-ga-bin.jar все замечательно работает. Попробуй так:
Код: plaintext
1.
    con = DriverManager.getConnection("jdbc:mysql://IP/DBase?characterEncoding=Cp1251", "login","apassw");
...
Рейтинг: 0 / 0
26.07.2005, 08:58
    #33183989
taison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
1. С выводом всё получилось, причём на разных IDE. Роман! Большое спасибо.

2. А с кириллицей не идёт. Думаю может из-за шрифта (хотя если база на MySQL koi8, а клиент на винде Cp1251, то мне надо просто поменять кодировку в приложении), но смена кодировки не помогает. В JBuilder 7 показывает только 5 шрифтов в свойствах jdbTable, как добавить например Arial не понятно. Есть возможность поменять кодировку Project-Project properties-General-Encoding, но там нет ни koi8 ни CP866. Есть Cp1251, но это не влияет. В Eclipse 3.0 тоже есть Project-properties-info, но смена кодировки влият только на то что написано русскими буквами в проекте, а на текст из БД - не влияет.
Дописал код:
.
.
f.setFont( "Arial", 1, 12);
.
.
public void setFont(String string, int i, int j) {
// TODO Auto-generated method stub
}
Без изменений. Может я что-то упустил?
...
Рейтинг: 0 / 0
26.07.2005, 10:43
    #33184238
Кувалдин Роман
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
characterEncoding=koi8-r пробовал?
...
Рейтинг: 0 / 0
26.07.2005, 11:49
    #33184459
taison
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Как данные вывести не в терминал, а в форму?
Пробовал, меняет кодировку, символы типа ò üË преобразуются в Ð Ýê
И то запросом ResultSet resultset1 = statement.executeQuery("set character set cp1251_koi8"); из http://dev.mysql.com/doc/mysql/ru/set-option.html
Вставка con = DriverManager.getConnection("jdbc:mysql://IP/DBase?characterEncoding=koi8","login","apassw"); ничего не меняет.
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Как данные вывести не в терминал, а в форму? / 10 сообщений из 10, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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